diff --git a/data/perf/scenario_2/dlt/2023-05May-31/response_time.csv b/data/perf/scenario_2/dlt/2023-05May-31/response_time.csv
new file mode 100644
index 0000000000000000000000000000000000000000..96d24b1fbe140e1b0228da8c8cb1b4d4ec115c5e
--- /dev/null
+++ b/data/perf/scenario_2/dlt/2023-05May-31/response_time.csv
@@ -0,0 +1,1001 @@
+action,record_type,record_uuid,size_bytes,num_endpoints,num_config_rules,num_constraints,num_sub_services,num_sub_slices,time_requested,time_replied,time_notified,exec_time,event_delay
+get,device,67a2dbbc-af11-448b-9871-f40595152463,106245,9,89,,,,1685549898.8270626,1685549899.1570356,,0.3299729824066162,
+delete,link,172901c7-3ad3-4896-8c9c-26ea736a27f4,741,2,,,,,1685549899.1597447,1685549901.4000366,1685549901.4010313,2.2402918338775635,2.241286516189575
+create,link,c25a0b64-52f4-4723-85dd-02f1f1968ad5,741,2,,,,,1685549901.400742,1685549903.6451468,1685549903.6403408,2.2444047927856445,2.2395987510681152
+update,device,661dcc5e-0a40-4afb-9919-040603a8e6df,20001,25,10,,,,1685549903.6534967,1685549906.2569816,1685549906.1950586,2.603484869003296,2.5415618419647217
+update,device,661dcc5e-0a40-4afb-9919-040603a8e6df,70428,12,61,,,,1685550765.1250987,1685550768.0534167,1685550768.0054681,2.9283180236816406,2.8803694248199463
+get,link,c77fba89-113c-4a9e-bfe8-ecb64eeb2685,741,2,,,,,1685549906.2571216,1685549906.3281226,,0.07100105285644531,
+update,service,5bcc8f1a-b9f0-4e43-99a0-883013a19b37,8734,2,5,3,,,1685549906.3342068,1685549908.7170134,1685549908.711966,2.3828065395355225,2.3777592182159424
+update,service,5bcc8f1a-b9f0-4e43-99a0-883013a19b37,9241,2,5,3,,,1685550692.7853603,1685550695.1578915,1685550695.1517642,2.3725311756134033,2.366403818130493
+update,service,5bcc8f1a-b9f0-4e43-99a0-883013a19b37,9942,2,5,3,,,1685550894.769752,1685550897.207105,1685550897.2062979,2.4373528957366943,2.4365458488464355
+update,service,5bcc8f1a-b9f0-4e43-99a0-883013a19b37,10216,2,5,3,,,1685550968.3652446,1685550970.8085575,1685550970.8059607,2.443312883377075,2.440716028213501
+get,slice,e51e01ed-26a9-4b12-bbf4-630883d84858,11085,2,5,3,0,1,1685549908.717091,1685549908.8497171,,0.13262605667114258,
+get,slice,e51e01ed-26a9-4b12-bbf4-630883d84858,11085,2,5,3,0,1,1685550044.962287,1685550045.0962157,,0.13392877578735352,
+get,service,9fae51b2-e0d6-41f4-bd58-7ce0554d961e,9794,2,5,3,,,1685549908.850033,1685549908.9249213,,0.07488822937011719,
+get,service,9fae51b2-e0d6-41f4-bd58-7ce0554d961e,9794,2,5,3,,,1685550050.6240823,1685550050.759958,,0.13587570190429688,
+get,service,9fae51b2-e0d6-41f4-bd58-7ce0554d961e,9794,2,5,3,,,1685550130.5777588,1685550130.7097173,,0.1319584846496582,
+create,service,1fe7c3a8-93de-4481-9602-c0f5261ee936,9672,2,5,3,,,1685549908.9358804,1685549911.423276,1685549911.368658,2.4873955249786377,2.4327776432037354
+create,slice,593b0301-821e-434e-b403-2b92dcf5a8c1,8835,2,5,3,0,1,1685549911.427093,1685549913.7936683,1685549913.7869866,2.366575241088867,2.359893560409546
+delete,device,d47ee2a9-089f-4146-935c-14a63d07b775,75703,37,55,,,,1685549913.7970097,1685549916.5514534,1685549916.4941828,2.754443645477295,2.6971731185913086
+update,slice,aea81204-2f55-40a1-b304-97dc970e8ad4,10404,2,5,3,0,2,1685549916.5570242,1685549919.0011373,1685549918.984249,2.44411301612854,2.42722487449646
+update,link,cdd7dd85-2fa5-44fc-bae6-5f16c68662bb,741,2,,,,,1685549919.0023305,1685549921.2458012,1685549921.24281,2.2434706687927246,2.2404794692993164
+update,link,cdd7dd85-2fa5-44fc-bae6-5f16c68662bb,741,2,,,,,1685550128.3339336,1685550130.577662,1685550130.574136,2.2437283992767334,2.2402024269104004
+update,link,cdd7dd85-2fa5-44fc-bae6-5f16c68662bb,741,2,,,,,1685550250.5039074,1685550252.7507584,1685550252.7505386,2.2468509674072266,2.246631145477295
+create,device,9f260c4f-5ef4-4335-96fc-c6a736507fc5,31155,20,21,,,,1685549921.266911,1685549923.9125628,1685549923.8845232,2.6456518173217773,2.61761212348938
+delete,service,1aadf392-f04a-4f0a-af1c-7273c4424c86,8117,2,5,3,,,1685549923.9131134,1685549926.2115643,1685549926.2107444,2.2984509468078613,2.297631025314331
+delete,slice,05a64f9c-b01e-4a6e-acd6-dc497bd43721,10469,2,5,3,2,0,1685549926.213237,1685549928.5742004,1685549928.573632,2.3609633445739746,2.3603949546813965
+delete,service,87cf68cc-f646-4ad9-9551-674fd09a8c20,10026,2,5,3,,,1685549928.5756795,1685549930.940028,1685549930.9334877,2.3643484115600586,2.3578081130981445
+get,link,cdd7dd85-2fa5-44fc-bae6-5f16c68662bb,741,2,,,,,1685549930.9401398,1685549931.0080986,,0.06795883178710938,
+get,link,cdd7dd85-2fa5-44fc-bae6-5f16c68662bb,741,2,,,,,1685550616.0091872,1685550616.0836594,,0.07447218894958496,
+delete,link,29c10ed2-89e9-407b-84e3-7014bcbe92c8,741,2,,,,,1685549931.0084217,1685549933.2766712,1685549933.276275,2.26824951171875,2.267853260040283
+update,slice,55dfa260-902b-4a37-bbaf-439b500a5bdc,11160,2,5,3,1,2,1685549933.2844148,1685549935.730925,1685549935.7301562,2.4465103149414062,2.4457414150238037
+update,link,5214f0ae-c140-4494-8208-b7c1e27fb05a,741,2,,,,,1685549935.7323756,1685549937.9717624,1685549937.9715445,2.239386796951294,2.239168882369995
+update,link,5214f0ae-c140-4494-8208-b7c1e27fb05a,741,2,,,,,1685550312.3701952,1685550314.6138716,1685550314.6135993,2.2436764240264893,2.2434041500091553
+update,link,5214f0ae-c140-4494-8208-b7c1e27fb05a,741,2,,,,,1685550530.1004624,1685550532.3722577,1685550532.3574302,2.2717952728271484,2.256967782974243
+update,link,5214f0ae-c140-4494-8208-b7c1e27fb05a,741,2,,,,,1685550548.0851848,1685550550.3259313,1685550550.325737,2.24074649810791,2.2405521869659424
+update,link,5214f0ae-c140-4494-8208-b7c1e27fb05a,741,2,,,,,1685551026.34457,1685551028.5950665,1685551028.5947661,2.2504966259002686,2.2501962184906006
+delete,slice,925edbae-b93f-4a43-8e1b-d3c07e3c30c4,10963,2,5,3,0,2,1685549937.97222,1685549940.3434925,1685549940.3431456,2.371272563934326,2.3709256649017334
+create,slice,ed958540-eade-47ec-b6c6-dae77276e5f3,10018,2,5,3,1,1,1685549940.3501449,1685549942.8079627,1685549942.8074238,2.457817792892456,2.4572789669036865
+create,service,990e1074-d461-4b22-bccf-c257cc174d9c,11189,2,5,3,,,1685549942.8213105,1685549945.2936425,1685549945.285249,2.472332000732422,2.4639384746551514
+delete,device,67a2dbbc-af11-448b-9871-f40595152463,106245,9,89,,,,1685549945.2954223,1685549948.0508242,1685549948.0425336,2.755401849746704,2.7471113204956055
+create,device,687f8f7b-5029-4af9-bd64-67497720ee25,115686,43,90,,,,1685549948.1381855,1685549951.3458214,1685549951.3309057,3.2076358795166016,3.1927201747894287
+create,link,20643d31-7ca0-4490-aff3-84e3dad48d43,741,2,,,,,1685549951.3463302,1685549953.5898266,1685549953.585652,2.2434964179992676,2.2393219470977783
+update,device,e2ffa3fd-a5c9-4d00-8662-d22e96bae674,54332,44,34,,,,1685549953.6151257,1685549956.455263,1685549956.4324627,2.840137243270874,2.8173370361328125
+get,service,7e1cc175-5c72-415e-b849-2ddbff0444cb,7940,2,5,3,,,1685549956.455434,1685549956.5941381,,0.1387040615081787,
+get,service,7e1cc175-5c72-415e-b849-2ddbff0444cb,7940,2,5,3,,,1685550164.5322568,1685550164.673387,,0.1411302089691162,
+update,service,d821bc57-a163-475c-9d68-36fbb1fe6761,10639,2,5,3,,,1685549956.6043167,1685549959.096975,1685549959.0493124,2.4926583766937256,2.444995641708374
+update,service,d821bc57-a163-475c-9d68-36fbb1fe6761,10157,2,5,3,,,1685550097.464378,1685550099.9029608,1685550099.901697,2.4385826587677,2.437318801879883
+update,service,d821bc57-a163-475c-9d68-36fbb1fe6761,9815,2,5,3,,,1685550187.2623045,1685550189.767192,1685550189.746012,2.504887342453003,2.4837074279785156
+update,service,d821bc57-a163-475c-9d68-36fbb1fe6761,9243,2,5,3,,,1685550474.5982518,1685550476.974663,1685550476.968617,2.376411199569702,2.3703651428222656
+get,slice,0e8a1e08-b8e0-43a9-bf5f-3a057e952792,10181,2,5,3,2,0,1685549959.0989733,1685549959.2283258,,0.12935256958007812,
+get,slice,0e8a1e08-b8e0-43a9-bf5f-3a057e952792,10181,2,5,3,2,0,1685550894.620147,1685550894.755989,,0.13584208488464355,
+get,device,929e2270-88ae-4296-ba04-f568216737e5,40306,19,30,,,,1685549959.2286317,1685549959.3813796,,0.15274786949157715,
+get,device,929e2270-88ae-4296-ba04-f568216737e5,40306,19,30,,,,1685550446.8464973,1685550447.0046017,,0.15810441970825195,
+get,device,929e2270-88ae-4296-ba04-f568216737e5,40306,19,30,,,,1685550641.3344374,1685550641.4933279,,0.1588904857635498,
+get,device,929e2270-88ae-4296-ba04-f568216737e5,40306,19,30,,,,1685551113.8661733,1685551114.1452606,,0.2790873050689697,
+update,device,cc73b1d2-e107-458c-aba2-557387ca536f,51520,4,49,,,,1685549959.4041276,1685549962.1810875,1685549962.1649163,2.7769598960876465,2.760788679122925
+delete,device,687f8f7b-5029-4af9-bd64-67497720ee25,115686,43,90,,,,1685549962.185308,1685549964.9392,1685549964.9344773,2.753891944885254,2.74916934967041
+create,slice,bfa726f4-bbd3-467b-bc83-86a0727a1b1f,8158,2,5,3,0,1,1685549964.9450088,1685549967.3893318,1685549967.3263562,2.4443230628967285,2.381347417831421
+update,link,ba7d09a5-3a46-4dc7-9f86-7f6959167783,741,2,,,,,1685549967.3910794,1685549969.6473265,1685549969.6396453,2.256247043609619,2.248565912246704
+update,link,ba7d09a5-3a46-4dc7-9f86-7f6959167783,741,2,,,,,1685550665.0326014,1685550667.270208,1685550667.2695112,2.2376065254211426,2.236909866333008
+update,link,ba7d09a5-3a46-4dc7-9f86-7f6959167783,741,2,,,,,1685550955.4745698,1685550957.7523344,1685550957.752111,2.2777645587921143,2.277541160583496
+update,link,ba7d09a5-3a46-4dc7-9f86-7f6959167783,741,2,,,,,1685551428.8252702,1685551431.0387545,1685551431.038471,2.213484287261963,2.213200807571411
+delete,service,0cae34e7-e2e1-4680-8086-5859931581f8,9246,2,5,3,,,1685549969.6476643,1685549972.0779035,1685549972.0772672,2.430239200592041,2.429602861404419
+get,service,0282f4fb-fdd7-476f-bdb8-c50d5dc3e9d4,9578,2,5,3,,,1685549972.0779762,1685549972.217895,,0.13991880416870117,
+delete,link,c77fba89-113c-4a9e-bfe8-ecb64eeb2685,741,2,,,,,1685549972.2183492,1685549974.4569948,1685549974.4566715,2.238645553588867,2.2383222579956055
+delete,slice,55dfa260-902b-4a37-bbaf-439b500a5bdc,11160,2,5,3,1,2,1685549974.4575276,1685549976.8262086,1685549976.8166037,2.368680953979492,2.3590760231018066
+create,device,0c7f43c2-472a-472a-bf6c-7bf3f679ff1b,116820,25,92,,,,1685549976.8940377,1685549980.0761328,1685549980.055282,3.1820950508117676,3.1612443923950195
+create,service,e57ab3ff-5bda-4360-a27c-3ebbecbda69b,10778,2,5,3,,,1685549980.0843132,1685549982.5378058,1685549982.5317478,2.4534926414489746,2.447434663772583
+get,device,f15d57b7-63fd-4b59-bd16-a110bc44f717,119578,35,93,,,,1685549982.5378811,1685549982.878916,,0.3410348892211914,
+get,device,f15d57b7-63fd-4b59-bd16-a110bc44f717,119578,35,93,,,,1685550012.854644,1685550013.2116394,,0.3569953441619873,
+get,device,f15d57b7-63fd-4b59-bd16-a110bc44f717,55375,16,42,,,,1685550074.9285288,1685550075.1903214,,0.2617926597595215,
+create,link,84a7d7e6-5c4b-4923-acae-9eb8abd96862,741,2,,,,,1685549982.8804107,1685549985.129161,1685549985.1227257,2.2487502098083496,2.2423150539398193
+update,slice,f14f5220-43df-4516-808d-9caf0b582057,12144,2,5,3,1,1,1685549985.1344876,1685549987.6222572,1685549987.6220157,2.487769603729248,2.487528085708618
+get,slice,f012d83d-a490-4f3d-8555-619cd95fc028,9421,2,5,3,0,0,1685549987.6234212,1685549987.753326,,0.12990474700927734,
+update,service,e57ab3ff-5bda-4360-a27c-3ebbecbda69b,11656,2,5,3,,,1685549987.7623549,1685549990.2292988,1685549990.2186992,2.4669439792633057,2.4563443660736084
+get,link,5214f0ae-c140-4494-8208-b7c1e27fb05a,741,2,,,,,1685549990.22942,1685549990.299773,,0.07035303115844727,
+get,link,5214f0ae-c140-4494-8208-b7c1e27fb05a,741,2,,,,,1685550892.3042808,1685550892.374177,,0.06989622116088867,
+get,link,5214f0ae-c140-4494-8208-b7c1e27fb05a,741,2,,,,,1685551048.376322,1685551048.448601,,0.07227897644042969,
+delete,device,4b6224ba-d82f-4bd2-8b1a-20cc6a60cf82,77941,11,71,,,,1685549990.302781,1685549992.9995356,1685549992.9773345,2.6967544555664062,2.674553394317627
+update,service,990e1074-d461-4b22-bccf-c257cc174d9c,7764,2,5,3,,,1685549993.003543,1685549995.3934698,1685549995.3828473,2.3899269104003906,2.3793044090270996
+get,slice,bfa726f4-bbd3-467b-bc83-86a0727a1b1f,8158,2,5,3,0,1,1685549995.3946009,1685549995.5261598,,0.13155889511108398,
+get,slice,bfa726f4-bbd3-467b-bc83-86a0727a1b1f,12000,2,5,3,0,1,1685550122.443335,1685550122.6231914,,0.1798563003540039,
+delete,link,c25a0b64-52f4-4723-85dd-02f1f1968ad5,741,2,,,,,1685549995.5266438,1685549997.7980065,1685549997.7977543,2.271362781524658,2.2711105346679688
+create,service,4db9fa61-3e7b-4afd-a1bd-da91df178482,10800,2,5,3,,,1685549997.8026242,1685550000.2443523,1685550000.2384768,2.441728115081787,2.435852527618408
+delete,service,e57ab3ff-5bda-4360-a27c-3ebbecbda69b,11656,2,5,3,,,1685550000.2449596,1685550002.6226954,1685550002.6153886,2.3777358531951904,2.370429039001465
+get,service,1fe7c3a8-93de-4481-9602-c0f5261ee936,9672,2,5,3,,,1685550002.6229007,1685550002.7586746,,0.1357738971710205,
+get,service,1fe7c3a8-93de-4481-9602-c0f5261ee936,9672,2,5,3,,,1685550560.033389,1685550560.1129801,,0.07959103584289551,
+get,service,1fe7c3a8-93de-4481-9602-c0f5261ee936,9672,2,5,3,,,1685550880.7470407,1685550880.8810577,,0.1340169906616211,
+update,device,0c7f43c2-472a-472a-bf6c-7bf3f679ff1b,66564,6,59,,,,1685550002.8196921,1685550005.684628,1685550005.6701274,2.864935874938965,2.850435256958008
+update,device,0c7f43c2-472a-472a-bf6c-7bf3f679ff1b,94381,13,79,,,,1685550273.2651217,1685550276.4158263,1685550276.2884195,3.1507046222686768,3.0232977867126465
+update,device,0c7f43c2-472a-472a-bf6c-7bf3f679ff1b,107029,7,91,,,,1685550419.0439153,1685550422.1971028,1685550422.1590893,3.1531875133514404,3.1151740550994873
+update,device,0c7f43c2-472a-472a-bf6c-7bf3f679ff1b,100523,26,82,,,,1685550653.661165,1685550656.7351372,1685550656.720426,3.073972225189209,3.0592610836029053
+update,device,0c7f43c2-472a-472a-bf6c-7bf3f679ff1b,18191,3,15,,,,1685550708.0485904,1685550710.6092708,1685550710.6007073,2.560680389404297,2.552116870880127
+update,slice,87537e84-d46b-48ad-9aae-d9d0bdfb7e35,9708,2,5,3,1,2,1685550005.6908176,1685550008.108212,1685550008.099534,2.4173943996429443,2.4087164402008057
+delete,slice,b7b21140-8eb1-4e3f-9bcc-0f4e24237858,8748,2,5,3,0,1,1685550008.108918,1685550010.4708874,1685550010.4663498,2.361969470977783,2.3574318885803223
+create,slice,ab1f7af1-30ee-441f-b418-63154876db4e,8912,2,5,3,1,2,1685550010.477174,1685550012.8545623,1685550012.848758,2.3773882389068604,2.371583938598633
+create,device,afb1223f-17c9-4e92-96e6-447509c3fa68,18892,25,9,,,,1685550013.2260876,1685550015.8121676,1685550015.7567017,2.5860800743103027,2.530614137649536
+get,link,5bbcdff3-51e9-4eb1-bdb5-8c30aec6a33f,741,2,,,,,1685550015.812263,1685550015.8848622,,0.07259917259216309,
+create,link,9460bf38-f9e3-448a-ae76-6c48ad9bc010,741,2,,,,,1685550015.885306,1685550018.1300807,1685550018.1260426,2.24477481842041,2.240736722946167
+update,link,5bbcdff3-51e9-4eb1-bdb5-8c30aec6a33f,741,2,,,,,1685550018.1304853,1685550020.3722522,1685550020.3718197,2.241766929626465,2.2413344383239746
+update,service,15163e30-c7e0-412b-8b3b-4063d5744989,7653,2,5,3,,,1685550020.3778064,1685550022.7627425,1685550022.7568865,2.3849360942840576,2.379080057144165
+get,device,7152652f-a803-4452-8835-f22df4682329,90040,36,68,,,,1685550022.7659504,1685550023.1297636,,0.3638131618499756,
+get,device,7152652f-a803-4452-8835-f22df4682329,124156,31,97,,,,1685550532.3723712,1685550532.728051,,0.3556797504425049,
+get,device,7152652f-a803-4452-8835-f22df4682329,101770,12,90,,,,1685550883.3849769,1685550883.7251015,,0.34012460708618164,
+get,service,5bcc8f1a-b9f0-4e43-99a0-883013a19b37,8734,2,5,3,,,1685550023.1307156,1685550023.2179427,,0.08722710609436035,
+get,service,5bcc8f1a-b9f0-4e43-99a0-883013a19b37,9241,2,5,3,,,1685550861.1194155,1685550861.2573,,0.13788437843322754,
+get,service,5bcc8f1a-b9f0-4e43-99a0-883013a19b37,9942,2,5,3,,,1685550952.6089091,1685550952.74671,,0.137800931930542,
+get,service,5bcc8f1a-b9f0-4e43-99a0-883013a19b37,10216,2,5,3,,,1685551126.913635,1685551127.0474317,,0.13379669189453125,
+delete,link,5bbcdff3-51e9-4eb1-bdb5-8c30aec6a33f,741,2,,,,,1685550023.2182574,1685550025.4597173,1685550025.4605536,2.241459846496582,2.2422962188720703
+delete,service,4db9fa61-3e7b-4afd-a1bd-da91df178482,10800,2,5,3,,,1685550025.4602013,1685550027.8297725,1685550027.823424,2.3695712089538574,2.36322283744812
+create,service,e8fa19fc-b095-4669-a5b4-f2bbb734986e,9024,2,5,3,,,1685550027.8364985,1685550030.2178354,1685550030.212256,2.3813369274139404,2.3757574558258057
+get,link,85bc0dde-646f-44b7-bd87-84e6a930d49b,741,2,,,,,1685550030.2193685,1685550030.2879355,,0.06856703758239746,
+get,link,85bc0dde-646f-44b7-bd87-84e6a930d49b,741,2,,,,,1685550702.7660139,1685550702.8397236,,0.07370972633361816,
+update,slice,bfa726f4-bbd3-467b-bc83-86a0727a1b1f,12000,2,5,3,0,1,1685550030.2968922,1685550032.762866,1685550032.7386715,2.4659738540649414,2.441779375076294
+update,slice,bfa726f4-bbd3-467b-bc83-86a0727a1b1f,10799,2,5,3,2,0,1685550316.9906175,1685550319.526203,1685550319.5199327,2.535585403442383,2.529315233230591
+create,slice,7b657e0d-cbbb-4f2f-8023-eda146380715,11488,2,5,3,2,1,1685550032.7783911,1685550035.2259035,1685550035.2201703,2.44751238822937,2.441779136657715
+delete,slice,87537e84-d46b-48ad-9aae-d9d0bdfb7e35,9708,2,5,3,1,2,1685550035.2270145,1685550037.5948448,1685550037.5917125,2.367830276489258,2.3646979331970215
+update,link,cf684cbf-3cac-477d-85ac-8a26e5e34981,741,2,,,,,1685550037.5951674,1685550039.842084,1685550039.835481,2.2469165325164795,2.2403135299682617
+create,link,43898698-7edd-4a04-ab88-45af1295ed15,741,2,,,,,1685550039.8433301,1685550042.0950015,1685550042.094748,2.251671314239502,2.251417875289917
+update,device,f15d57b7-63fd-4b59-bd16-a110bc44f717,55375,16,42,,,,1685550042.1275191,1685550044.9618416,1685550044.9191833,2.834322452545166,2.7916641235351562
+update,device,f15d57b7-63fd-4b59-bd16-a110bc44f717,95148,31,83,,,,1685550886.8550353,1685550890.047189,1685550889.9719782,3.1921536922454834,3.116942882537842
+delete,device,ed9e8bcf-698b-46fb-8b84-f04a417a0e0e,95611,46,73,,,,1685550045.099634,1685550047.875255,1685550047.8396368,2.775621175765991,2.7400028705596924
+create,device,42cd9de9-e7d3-49c2-b532-42eb0ca04f5e,24042,15,17,,,,1685550047.8918495,1685550050.622645,1685550050.5508368,2.730795383453369,2.658987283706665
+update,slice,593b0301-821e-434e-b403-2b92dcf5a8c1,9191,2,5,3,2,1,1685550050.766848,1685550053.171008,1685550053.1657438,2.4041600227355957,2.398895740509033
+update,service,491ad418-1d73-4876-999c-de4920311f14,10935,2,5,3,,,1685550053.1773357,1685550055.6305172,1685550055.6242545,2.453181505203247,2.4469187259674072
+update,service,491ad418-1d73-4876-999c-de4920311f14,8225,2,5,3,,,1685550122.6306224,1685550125.1083822,1685550125.1033363,2.477759838104248,2.4727139472961426
+update,link,85bc0dde-646f-44b7-bd87-84e6a930d49b,741,2,,,,,1685550055.6310825,1685550057.872527,1685550057.8720276,2.2414443492889404,2.2409451007843018
+update,link,85bc0dde-646f-44b7-bd87-84e6a930d49b,741,2,,,,,1685550489.568868,1685550491.8204772,1685550491.8098607,2.2516093254089355,2.240992784500122
+update,device,7152652f-a803-4452-8835-f22df4682329,28997,25,16,,,,1685550057.8896043,1685550060.5519521,1685550060.5402298,2.6623477935791016,2.650625467300415
+update,device,7152652f-a803-4452-8835-f22df4682329,124156,31,97,,,,1685550138.301946,1685550141.7951078,1685550141.6762526,3.493161916732788,3.3743066787719727
+update,device,7152652f-a803-4452-8835-f22df4682329,101770,12,90,,,,1685550565.093574,1685550568.2096174,1685550568.1213007,3.1160433292388916,3.027726650238037
+update,device,7152652f-a803-4452-8835-f22df4682329,61691,19,52,,,,1685551652.4879904,1685551655.3687778,1685551655.2948952,2.8807873725891113,2.8069047927856445
+create,device,99c37cd3-fe36-477a-ae37-50a84b7152d7,34092,15,26,,,,1685550060.5772042,1685550063.266293,1685550063.240183,2.689088821411133,2.6629788875579834
+delete,service,0282f4fb-fdd7-476f-bdb8-c50d5dc3e9d4,9578,2,5,3,,,1685550063.2667284,1685550065.6252794,1685550065.6218038,2.358551025390625,2.3550753593444824
+create,link,0db95318-dc3e-47ff-8022-3c310a253988,741,2,,,,,1685550065.6259274,1685550067.8737526,1685550067.868313,2.2478251457214355,2.2423856258392334
+delete,link,cf684cbf-3cac-477d-85ac-8a26e5e34981,741,2,,,,,1685550067.8739762,1685550070.1235209,1685550070.1215713,2.249544620513916,2.2475950717926025
+create,service,e7f4fc97-2269-4126-ac29-7f1deaef6ba3,9547,2,5,3,,,1685550070.1298902,1685550072.571337,1685550072.563262,2.4414467811584473,2.4333717823028564
+delete,slice,00786fb8-b109-4d7a-9fd3-e07c330578b6,9284,2,5,3,1,0,1685550072.5730135,1685550074.9284263,1685550074.9281406,2.355412721633911,2.3551270961761475
+create,slice,cb590c68-2855-4dfd-acbe-1ca813a73075,11295,2,5,3,1,2,1685550075.196684,1685550077.6592965,1685550077.6414554,2.4626126289367676,2.4447715282440186
+get,link,2921c8bb-7075-4338-975c-31427336f9a7,741,2,,,,,1685550077.6593685,1685550077.735133,,0.07576441764831543,
+delete,device,f0bec35f-cd15-4c02-98da-8c4986333237,86015,22,76,,,,1685550077.739987,1685550080.4033363,1685550080.396717,2.6633493900299072,2.6567301750183105
+get,slice,cb590c68-2855-4dfd-acbe-1ca813a73075,11295,2,5,3,1,2,1685550080.404987,1685550080.5390306,,0.13404345512390137,
+delete,service,990e1074-d461-4b22-bccf-c257cc174d9c,7764,2,5,3,,,1685550080.5405698,1685550082.8751664,1685550082.8684247,2.334596633911133,2.327854871749878
+update,device,b36e3dde-1c97-45d1-b62b-7f15bb79b71e,36292,43,15,,,,1685550082.8900733,1685550085.5686276,1685550085.5465324,2.6785542964935303,2.656459093093872
+update,link,8305c29e-5e06-4eaa-a17f-957249d482ff,741,2,,,,,1685550085.5692298,1685550087.8205884,1685550087.8195221,2.2513585090637207,2.2502923011779785
+create,slice,eb68b280-9e62-42d8-ba6b-2a5f80ec9762,9508,2,5,3,2,1,1685550087.8274055,1685550090.2702475,1685550090.2696562,2.4428420066833496,2.4422507286071777
+delete,device,e2ffa3fd-a5c9-4d00-8662-d22e96bae674,54332,44,34,,,,1685550090.2749853,1685550092.8069956,1685550092.7937655,2.532010316848755,2.51878023147583
+create,link,7e07cff2-e2a0-4710-a591-a379d0394e8a,741,2,,,,,1685550092.8074,1685550095.0700147,1685550095.0670388,2.2626147270202637,2.259638786315918
+create,service,5df2cd3c-b0ec-417c-bd97-f70b411d8933,8216,2,5,3,,,1685550095.077055,1685550097.4590006,1685550097.4538338,2.3819456100463867,2.3767788410186768
+get,link,8305c29e-5e06-4eaa-a17f-957249d482ff,741,2,,,,,1685550099.9031074,1685550099.9786518,,0.07554435729980469,
+create,device,bb8ffa57-2e61-4710-8c9a-83fc3008a56c,38445,38,20,,,,1685550099.9988592,1685550102.837355,1685550102.7445464,2.8384957313537598,2.745687246322632
+delete,slice,ab1f7af1-30ee-441f-b418-63154876db4e,8912,2,5,3,1,2,1685550102.8377497,1685550105.2521703,1685550105.250797,2.4144206047058105,2.4130473136901855
+delete,link,9460bf38-f9e3-448a-ae76-6c48ad9bc010,741,2,,,,,1685550105.2523687,1685550107.5092957,1685550107.5071018,2.256927013397217,2.254733085632324
+get,slice,ed958540-eade-47ec-b6c6-dae77276e5f3,10018,2,5,3,1,1,1685550107.5094326,1685550107.6502123,,0.14077973365783691,
+get,device,99c37cd3-fe36-477a-ae37-50a84b7152d7,34092,15,26,,,,1685550107.6505384,1685550107.8059056,,0.15536713600158691,
+get,device,99c37cd3-fe36-477a-ae37-50a84b7152d7,80268,29,64,,,,1685550707.6127717,1685550707.9063988,,0.2936270236968994,
+get,device,99c37cd3-fe36-477a-ae37-50a84b7152d7,80268,29,64,,,,1685550828.5911238,1685550828.8830655,,0.29194164276123047,
+get,service,c6f2cd89-0ec1-4409-a4f0-d9ddb9f3655c,10242,2,5,3,,,1685550107.8076005,1685550107.8945854,,0.08698487281799316,
+get,service,c6f2cd89-0ec1-4409-a4f0-d9ddb9f3655c,9962,2,5,3,,,1685550359.633676,1685550359.7633445,,0.1296684741973877,
+get,service,c6f2cd89-0ec1-4409-a4f0-d9ddb9f3655c,10447,2,5,3,,,1685550707.918949,1685550708.039815,,0.12086606025695801,
+update,slice,e51e01ed-26a9-4b12-bbf4-630883d84858,9504,2,5,3,0,0,1685550107.9014158,1685550110.350435,1685550110.330456,2.449019193649292,2.4290401935577393
+update,slice,e51e01ed-26a9-4b12-bbf4-630883d84858,10739,2,5,3,0,0,1685550801.3919783,1685550803.8415797,1685550803.8334618,2.449601411819458,2.441483497619629
+update,slice,1881e59c-a5e9-4039-9d62-f6e738e13081,12134,2,5,3,1,0,1685550110.360366,1685550112.9419231,1685550112.8132286,2.581557035446167,2.452862501144409
+update,slice,1881e59c-a5e9-4039-9d62-f6e738e13081,9403,2,5,3,2,0,1685550611.21944,1685550613.7286525,1685550613.7121468,2.5092124938964844,2.492706775665283
+update,slice,1881e59c-a5e9-4039-9d62-f6e738e13081,9931,2,5,3,1,0,1685551271.6665807,1685551274.1122277,1685551274.1028738,2.4456470012664795,2.436293125152588
+update,slice,1881e59c-a5e9-4039-9d62-f6e738e13081,8324,2,5,3,1,0,1685551639.1965528,1685551641.6390326,1685551641.59717,2.4424798488616943,2.4006173610687256
+create,service,5689b23d-36b6-49eb-9173-c1e02007dac8,9714,2,5,3,,,1685550112.9504142,1685550115.3970284,1685550115.3884692,2.4466142654418945,2.4380550384521484
+delete,service,7f5cfd8a-cc01-4640-b80b-b46be150b4f9,9643,2,5,3,,,1685550115.397603,1685550117.7541957,1685550117.7538815,2.3565926551818848,2.356278419494629
+create,slice,3636e7b5-de41-416e-bd8d-2110a79dbf75,10716,2,5,3,0,1,1685550117.7643867,1685550120.2009525,1685550120.200346,2.43656587600708,2.4359593391418457
+delete,link,2921c8bb-7075-4338-975c-31427336f9a7,741,2,,,,,1685550120.2012742,1685550122.4432375,1685550122.4429479,2.2419633865356445,2.241673707962036
+get,link,20643d31-7ca0-4490-aff3-84e3dad48d43,741,2,,,,,1685550125.1084924,1685550125.1792572,,0.07076478004455566,
+get,link,20643d31-7ca0-4490-aff3-84e3dad48d43,741,2,,,,,1685550362.3390343,1685550362.4111092,,0.07207489013671875,
+create,device,98b4c1d2-b816-46b7-be50-958c0427bf3a,100847,46,81,,,,1685550125.2493248,1685550128.3334992,1685550128.215648,3.084174394607544,2.966323137283325
+delete,slice,f012d83d-a490-4f3d-8555-619cd95fc028,9421,2,5,3,0,0,1685550130.7105553,1685550133.0732527,1685550133.0700767,2.3626973628997803,2.3595213890075684
+delete,device,cc73b1d2-e107-458c-aba2-557387ca536f,51520,4,49,,,,1685550133.0743437,1685550135.6837234,1685550135.679816,2.609379768371582,2.6054723262786865
+create,link,31947184-fd3c-4271-87db-e3de76037fa3,741,2,,,,,1685550135.6864467,1685550137.9421964,1685550137.931914,2.2557497024536133,2.2454674243927
+get,device,b36e3dde-1c97-45d1-b62b-7f15bb79b71e,36292,43,15,,,,1685550137.942296,1685550138.1627634,,0.22046732902526855,
+get,slice,f14f5220-43df-4516-808d-9caf0b582057,12144,2,5,3,1,1,1685550141.7953355,1685550141.9664366,,0.17110109329223633,
+update,slice,a541a2ea-841a-4932-b85f-f9792a94ee71,10145,2,5,3,1,0,1685550141.971995,1685550144.488782,1685550144.4671957,2.516786813735962,2.4952006340026855
+update,slice,a541a2ea-841a-4932-b85f-f9792a94ee71,11354,2,5,3,0,2,1685550856.0192661,1685550858.5240064,1685550858.519941,2.5047402381896973,2.5006749629974365
+update,slice,a541a2ea-841a-4932-b85f-f9792a94ee71,10757,2,5,3,1,0,1685551043.3270085,1685551045.8349533,1685551045.8310227,2.5079448223114014,2.504014253616333
+update,slice,a541a2ea-841a-4932-b85f-f9792a94ee71,10601,2,5,3,2,0,1685551236.0913036,1685551238.5395894,1685551238.5295522,2.4482858180999756,2.438248634338379
+update,slice,a541a2ea-841a-4932-b85f-f9792a94ee71,9999,2,5,3,0,0,1685551578.9243164,1685551581.4106462,1685551581.4083145,2.4863297939300537,2.4839980602264404
+update,slice,a541a2ea-841a-4932-b85f-f9792a94ee71,10429,2,5,3,2,0,1685551738.7180347,1685551741.1792543,1685551741.1690798,2.461219549179077,2.451045036315918
+update,device,4989d9ae-43e0-4110-8b25-11b168b541a3,49773,30,33,,,,1685550144.5194957,1685550147.3768358,1685550147.355829,2.857340097427368,2.8363332748413086
+update,link,0db95318-dc3e-47ff-8022-3c310a253988,741,2,,,,,1685550147.377258,1685550149.6256242,1685550149.6190763,2.248366117477417,2.2418181896209717
+update,link,0db95318-dc3e-47ff-8022-3c310a253988,741,2,,,,,1685550325.2225053,1685550327.457054,1685550327.4636395,2.234548568725586,2.2411341667175293
+update,link,0db95318-dc3e-47ff-8022-3c310a253988,741,2,,,,,1685550904.4811447,1685550906.7314155,1685550906.7259493,2.2502708435058594,2.244804620742798
+update,link,0db95318-dc3e-47ff-8022-3c310a253988,741,2,,,,,1685551203.1224632,1685551205.3659058,1685551205.3648212,2.2434425354003906,2.2423579692840576
+update,link,0db95318-dc3e-47ff-8022-3c310a253988,741,2,,,,,1685551250.0421638,1685551252.2777565,1685551252.277497,2.2355926036834717,2.235333204269409
+delete,link,8305c29e-5e06-4eaa-a17f-957249d482ff,741,2,,,,,1685550149.625855,1685550151.920795,1685550151.920179,2.2949399948120117,2.2943239212036133
+create,service,1c96b51c-6854-4198-9911-9044e0362420,9251,2,5,3,,,1685550151.9266605,1685550154.3165438,1685550154.3075438,2.389883279800415,2.38088321685791
+delete,device,b36e3dde-1c97-45d1-b62b-7f15bb79b71e,36292,43,15,,,,1685550154.3189287,1685550156.92674,1685550156.8713694,2.607811212539673,2.552440643310547
+delete,slice,3636e7b5-de41-416e-bd8d-2110a79dbf75,10716,2,5,3,0,1,1685550156.9303155,1685550159.2978342,1685550159.290393,2.367518663406372,2.3600776195526123
+create,slice,ec5d1823-664c-42a3-a103-ee21d2d63374,9865,2,5,3,2,1,1685550159.3083177,1685550161.7609532,1685550161.7615016,2.4526355266571045,2.453183889389038
+get,link,e9b46e15-c039-4ae8-a130-12f6413d4c91,741,2,,,,,1685550161.7611172,1685550161.8317623,,0.07064509391784668,
+get,link,e9b46e15-c039-4ae8-a130-12f6413d4c91,741,2,,,,,1685550660.0770266,1685550660.1490765,,0.07204985618591309,
+get,link,e9b46e15-c039-4ae8-a130-12f6413d4c91,741,2,,,,,1685550798.6012948,1685550798.67273,,0.07143521308898926,
+get,device,3c7fac77-8bec-4ddf-9a12-ddd39021b95e,43125,19,36,,,,1685550161.831963,1685550162.0888608,,0.2568976879119873,
+update,service,0cda66d1-83b2-4ae6-bef8-015cb136fb5c,8952,2,5,3,,,1685550162.0989711,1685550164.5303683,1685550164.47613,2.4313971996307373,2.3771588802337646
+update,service,0cda66d1-83b2-4ae6-bef8-015cb136fb5c,9568,2,5,3,,,1685550205.323221,1685550207.7590704,1685550207.7581296,2.43584942817688,2.434908628463745
+create,link,4a4deddd-f3ff-4487-8956-ba39c8b6fafc,741,2,,,,,1685550164.6747408,1685550166.909774,1685550166.9094565,2.2350332736968994,2.234715700149536
+delete,service,46573fb6-6889-4fac-a5ea-5e110f443cce,6792,2,5,3,,,1685550166.9103339,1685550169.2229555,1685550169.2310188,2.312621593475342,2.3206849098205566
+create,device,ee8073f2-5d01-406a-9ca7-0b4dfcfab8e3,95286,25,82,,,,1685550169.2807827,1685550172.3932765,1685550172.2923174,3.1124937534332275,3.0115346908569336
+update,slice,6f118951-0466-4fe0-abed-13dc87750d52,10019,2,5,3,2,2,1685550172.4033027,1685550174.9016154,1685550174.8511279,2.4983127117156982,2.4478251934051514
+update,slice,6f118951-0466-4fe0-abed-13dc87750d52,9145,2,5,3,0,1,1685550258.3883016,1685550260.77794,1685550260.7716677,2.3896384239196777,2.383366107940674
+update,slice,6f118951-0466-4fe0-abed-13dc87750d52,9380,2,5,3,1,0,1685550902.0402608,1685550904.4772363,1685550904.475886,2.4369754791259766,2.4356253147125244
+update,slice,6f118951-0466-4fe0-abed-13dc87750d52,10137,2,5,3,2,1,1685550998.8844302,1685551001.3424356,1685551001.3313286,2.458005428314209,2.4468984603881836
+update,slice,6f118951-0466-4fe0-abed-13dc87750d52,10553,2,5,3,1,0,1685551131.8331652,1685551134.3417783,1685551134.3358188,2.508613109588623,2.5026535987854004
+create,slice,c06e93c6-2b0c-4072-b85d-5fc3d9b0c57c,8128,2,5,3,2,0,1685550174.912401,1685550177.2944856,1685550177.291696,2.382084608078003,2.3792951107025146
+create,device,8b08d405-3a7d-41ca-9ff2-be1d6e56f80a,47972,6,46,,,,1685550177.3424664,1685550180.1794374,1685550180.1187463,2.8369710445404053,2.776279926300049
+update,device,eae2e076-cc7e-471e-b126-2fa4dbdeb4e0,15047,7,12,,,,1685550180.2024531,1685550182.721858,1685550182.7120342,2.519404888153076,2.5095810890197754
+create,link,284aff57-0ec0-4075-adbb-ea02a3ca4db8,741,2,,,,,1685550182.7223995,1685550184.962551,1685550184.961912,2.2401516437530518,2.2395124435424805
+update,link,aaafd56c-9bfd-4cfc-bac2-54ee9b3bd63a,741,2,,,,,1685550184.9634047,1685550187.2272053,1685550187.2208567,2.263800621032715,2.2574520111083984
+get,link,fff48345-6c85-40ed-b046-259c88a4fb63,741,2,,,,,1685550189.767346,1685550189.842692,,0.07534599304199219,
+get,link,fff48345-6c85-40ed-b046-259c88a4fb63,741,2,,,,,1685550325.0110857,1685550325.0869427,,0.07585692405700684,
+get,slice,7214273f-d6e2-45aa-8823-351e0fcbed0a,11601,2,5,3,2,1,1685550189.842916,1685550189.9880686,,0.14515256881713867,
+create,service,067d1016-4276-4748-9d7e-da23688878ba,10031,2,5,3,,,1685550190.0054202,1685550192.4594104,1685550192.450144,2.4539902210235596,2.4447238445281982
+delete,device,eae2e076-cc7e-471e-b126-2fa4dbdeb4e0,15047,7,12,,,,1685550192.4607303,1685550194.8627717,1685550194.861983,2.402041435241699,2.4012527465820312
+get,device,bb8ffa57-2e61-4710-8c9a-83fc3008a56c,38445,38,20,,,,1685550194.8640776,1685550195.1844933,,0.320415735244751,
+delete,slice,ed958540-eade-47ec-b6c6-dae77276e5f3,10018,2,5,3,1,1,1685550195.1872995,1685550197.5622098,1685550197.5633287,2.374910354614258,2.3760292530059814
+delete,service,6cff4c5f-a7bc-48fd-914f-51b9c29f7fa9,12014,2,5,3,,,1685550197.5628316,1685550199.9452746,1685550199.9422274,2.3824429512023926,2.3793957233428955
+get,service,84a4219f-235f-48d5-8e98-36b8676b2319,9909,2,5,3,,,1685550199.9454381,1685550200.0793972,,0.13395905494689941,
+get,service,84a4219f-235f-48d5-8e98-36b8676b2319,10530,2,5,3,,,1685550537.681865,1685550537.8163795,,0.13451457023620605,
+get,service,84a4219f-235f-48d5-8e98-36b8676b2319,10053,2,5,3,,,1685550976.5158894,1685550976.6455595,,0.1296701431274414,
+delete,link,76a35cdc-834d-49c9-a1eb-603a961c9162,741,2,,,,,1685550200.080069,1685550202.3742437,1685550202.3719797,2.2941746711730957,2.2919106483459473
+update,device,ee8073f2-5d01-406a-9ca7-0b4dfcfab8e3,66154,9,56,,,,1685550202.4340265,1685550205.315744,1685550205.2941267,2.8817174434661865,2.860100269317627
+create,link,a9b843d7-7e23-453c-bf8b-4d981c6e7d3c,741,2,,,,,1685550207.759504,1685550210.0080879,1685550210.006342,2.2485837936401367,2.246837854385376
+delete,device,8b08d405-3a7d-41ca-9ff2-be1d6e56f80a,47972,6,46,,,,1685550210.0090597,1685550212.6639042,1685550212.605429,2.6548445224761963,2.5963692665100098
+delete,slice,7214273f-d6e2-45aa-8823-351e0fcbed0a,11601,2,5,3,2,1,1685550212.6643367,1685550215.043399,1685550215.0409577,2.3790624141693115,2.3766210079193115
+create,device,99deb416-cc4c-431d-b6f4-49d259892872,95732,21,79,,,,1685550215.101761,1685550218.2435155,1685550218.1674168,3.141754388809204,3.0656557083129883
+get,device,99deb416-cc4c-431d-b6f4-49d259892872,95732,21,79,,,,1685550218.243655,1685550218.5725539,,0.32889890670776367,
+get,device,99deb416-cc4c-431d-b6f4-49d259892872,95732,21,79,,,,1685550263.292873,1685550263.555467,,0.26259398460388184,
+create,slice,d462c4e3-9ab0-41a3-9cb5-2f4416f50e65,9721,2,5,3,0,0,1685550218.579319,1685550221.0739424,1685550221.0460505,2.4946234226226807,2.466731548309326
+create,service,1fee4ddb-78ef-42e6-8e7a-b913007c4011,8881,2,5,3,,,1685550221.0822842,1685550223.4671912,1685550223.4605896,2.3849070072174072,2.378305435180664
+update,link,4a4deddd-f3ff-4487-8956-ba39c8b6fafc,741,2,,,,,1685550223.467518,1685550225.7129428,1685550225.7059965,2.245424747467041,2.238478422164917
+delete,link,52d1b497-6c09-408c-bb6e-07a58418aead,741,2,,,,,1685550225.715015,1685550227.9933808,1685550227.9930608,2.2783658504486084,2.278045892715454
+get,link,31947184-fd3c-4271-87db-e3de76037fa3,741,2,,,,,1685550227.993473,1685550228.0641284,,0.07065534591674805,
+get,link,31947184-fd3c-4271-87db-e3de76037fa3,741,2,,,,,1685550434.5582674,1685550434.6279397,,0.0696723461151123,
+get,link,31947184-fd3c-4271-87db-e3de76037fa3,741,2,,,,,1685550467.4789872,1685550467.5527728,,0.07378554344177246,
+get,link,31947184-fd3c-4271-87db-e3de76037fa3,741,2,,,,,1685550514.3067093,1685550514.3784351,,0.07172584533691406,
+get,slice,3c640fb4-1a1f-4bf6-9d33-c3a6c8419993,10568,2,5,3,1,1,1685550228.0643134,1685550228.1960623,,0.13174891471862793,
+get,slice,3c640fb4-1a1f-4bf6-9d33-c3a6c8419993,9956,2,5,3,2,1,1685550446.7107258,1685550446.8462982,,0.1355724334716797,
+get,service,5689b23d-36b6-49eb-9173-c1e02007dac8,9714,2,5,3,,,1685550228.1964562,1685550228.34504,,0.14858388900756836,
+get,service,5689b23d-36b6-49eb-9173-c1e02007dac8,8811,2,5,3,,,1685550641.2042625,1685550641.3330069,,0.12874436378479004,
+update,slice,3c640fb4-1a1f-4bf6-9d33-c3a6c8419993,9956,2,5,3,2,1,1685550228.3542352,1685550230.8489964,1685550230.8354566,2.4947612285614014,2.4812214374542236
+delete,service,0cda66d1-83b2-4ae6-bef8-015cb136fb5c,9568,2,5,3,,,1685550230.8517954,1685550233.213561,1685550233.211478,2.3617656230926514,2.359682559967041
+delete,slice,be100295-6b14-4273-80af-7d8b9f65deec,9037,2,5,3,1,0,1685550233.213926,1685550235.5737054,1685550235.5700798,2.3597793579101562,2.356153726577759
+delete,link,9d373797-5465-4a7b-8fe9-00a75eae2c05,741,2,,,,,1685550235.574009,1685550237.8218057,1685550237.8172266,2.2477967739105225,2.243217706680298
+update,service,c6f2cd89-0ec1-4409-a4f0-d9ddb9f3655c,9962,2,5,3,,,1685550237.8273149,1685550240.3096385,1685550240.2769473,2.48232364654541,2.449632406234741
+update,service,c6f2cd89-0ec1-4409-a4f0-d9ddb9f3655c,10447,2,5,3,,,1685550408.9422677,1685550411.4200249,1685550411.3796568,2.477757215499878,2.4373891353607178
+create,service,4cf798e2-733b-4a43-8d9a-4d2236c2edbf,9214,2,5,3,,,1685550240.32103,1685550242.7189922,1685550242.7120397,2.3979623317718506,2.39100980758667
+create,device,c596e0aa-a810-4b87-9228-565ffef37fd1,88067,21,78,,,,1685550242.7785892,1685550245.7852278,1685550245.678774,3.006638526916504,2.9001848697662354
+create,link,ca9a630c-8fad-4ad5-9738-65b9a713e836,741,2,,,,,1685550245.785796,1685550248.049346,1685550248.0435586,2.263550043106079,2.2577626705169678
+get,link,ca9a630c-8fad-4ad5-9738-65b9a713e836,741,2,,,,,1685550248.0494654,1685550248.123074,,0.0736086368560791,
+get,link,ca9a630c-8fad-4ad5-9738-65b9a713e836,741,2,,,,,1685550981.4709468,1685550981.539916,,0.0689692497253418,
+delete,device,42cd9de9-e7d3-49c2-b532-42eb0ca04f5e,24042,15,17,,,,1685550248.1247454,1685550250.5029905,1685550250.4941926,2.3782451152801514,2.3694472312927246
+update,device,36423e04-0f15-4df7-9998-cd920eae3d68,95382,6,84,,,,1685550252.825145,1685550255.9065087,1685550255.8290327,3.0813636779785156,3.00388765335083
+create,slice,8d03c0c9-548f-45ee-a67a-df52ebd76e09,10108,2,5,3,0,1,1685550255.9113464,1685550258.3815963,1685550258.3631613,2.470249891281128,2.451814889907837
+delete,service,1cda7680-7306-4b00-8e73-d1c799c716f5,9905,2,5,3,,,1685550260.7785318,1685550263.1423638,1685550263.1379075,2.3638319969177246,2.3593757152557373
+get,slice,7b657e0d-cbbb-4f2f-8023-eda146380715,11488,2,5,3,2,1,1685550263.142525,1685550263.2860093,,0.14348435401916504,
+get,slice,7b657e0d-cbbb-4f2f-8023-eda146380715,10028,2,5,3,0,0,1685550628.632569,1685550628.8045468,,0.17197775840759277,
+get,slice,7b657e0d-cbbb-4f2f-8023-eda146380715,10028,2,5,3,0,0,1685550664.8977146,1685550665.0319076,,0.13419294357299805,
+get,slice,7b657e0d-cbbb-4f2f-8023-eda146380715,10028,2,5,3,0,0,1685551327.5652828,1685551327.7146575,,0.14937472343444824,
+get,slice,7b657e0d-cbbb-4f2f-8023-eda146380715,10028,2,5,3,0,0,1685551382.6503353,1685551382.780649,,0.13031363487243652,
+get,service,6ccddb88-8a57-44df-adac-9c677e1f5830,9697,2,5,3,,,1685550263.5575664,1685550263.635631,,0.0780646800994873,
+delete,slice,f14f5220-43df-4516-808d-9caf0b582057,12144,2,5,3,1,1,1685550263.636629,1685550266.0165672,1685550266.0118146,2.3799381256103516,2.375185489654541
+delete,link,1917ccef-baab-45f4-9a0f-ca7601628ccf,741,2,,,,,1685550266.0172536,1685550268.260554,1685550268.2599032,2.243300437927246,2.242649555206299
+create,slice,b19ee639-29c1-465c-a1be-6dccb456ee68,12393,2,5,3,2,0,1685550268.2748418,1685550270.7275798,1685550270.72247,2.452738046646118,2.4476282596588135
+create,service,f43c97f4-757e-4f9d-be38-f3a22963a4ba,9297,2,5,3,,,1685550270.7384784,1685550273.1803954,1685550273.1786284,2.4419169425964355,2.440150022506714
+get,slice,d462c4e3-9ab0-41a3-9cb5-2f4416f50e65,9721,2,5,3,0,0,1685550276.4161675,1685550276.549647,,0.13347959518432617,
+get,slice,d462c4e3-9ab0-41a3-9cb5-2f4416f50e65,9721,2,5,3,0,0,1685550576.3468034,1685550576.4845448,,0.1377413272857666,
+get,link,4a4deddd-f3ff-4487-8956-ba39c8b6fafc,741,2,,,,,1685550276.5498853,1685550276.623524,,0.0736386775970459,
+get,service,15163e30-c7e0-412b-8b3b-4063d5744989,7653,2,5,3,,,1685550276.6236594,1685550276.7096956,,0.08603620529174805,
+create,link,aa9a1963-99a7-4ac4-a548-8c45a89f302c,741,2,,,,,1685550276.71596,1685550278.9569526,1685550278.9533687,2.240992546081543,2.2374086380004883
+update,link,a9b843d7-7e23-453c-bf8b-4d981c6e7d3c,741,2,,,,,1685550278.9572778,1685550281.2047875,1685550281.1991687,2.247509717941284,2.2418909072875977
+delete,device,86045427-6a11-4cb5-8655-782a9d0c1f55,23648,19,15,,,,1685550281.206526,1685550283.632708,1685550283.6235454,2.4261820316314697,2.4170193672180176
+update,service,067d1016-4276-4748-9d7e-da23688878ba,10266,2,5,3,,,1685550283.643262,1685550286.1034105,1685550286.0824344,2.460148572921753,2.4391725063323975
+update,service,067d1016-4276-4748-9d7e-da23688878ba,10370,2,5,3,,,1685550378.1151514,1685550380.562665,1685550380.5587316,2.4475135803222656,2.443580150604248
+update,slice,b0370781-5334-48f8-bdcc-780f8e6c6dba,10993,2,5,3,2,2,1685550286.116683,1685550288.6100502,1685550288.579511,2.4933671951293945,2.4628279209136963
+delete,service,7e1cc175-5c72-415e-b849-2ddbff0444cb,7940,2,5,3,,,1685550288.6124334,1685550290.9158983,1685550290.915552,2.303464889526367,2.3031184673309326
+create,device,5d5861dc-c4ca-4d9d-a364-b13fcc3da64e,35782,5,33,,,,1685550290.9526813,1685550293.6897957,1685550293.601494,2.737114429473877,2.648812770843506
+get,device,3602de03-cdac-4107-83b1-042c2f9216f2,108179,21,92,,,,1685550293.6899166,1685550294.0546188,,0.3647022247314453,
+get,link,a9b843d7-7e23-453c-bf8b-4d981c6e7d3c,741,2,,,,,1685550294.0561802,1685550294.128833,,0.07265281677246094,
+delete,device,3602de03-cdac-4107-83b1-042c2f9216f2,108179,21,92,,,,1685550294.1354098,1685550296.9144566,1685550296.8980289,2.7790467739105225,2.7626190185546875
+update,device,bb8ffa57-2e61-4710-8c9a-83fc3008a56c,118562,32,98,,,,1685550297.0301101,1685550300.3233423,1685550300.308762,3.2932322025299072,3.2786519527435303
+update,device,bb8ffa57-2e61-4710-8c9a-83fc3008a56c,41188,7,33,,,,1685550810.9227884,1685550813.6696036,1685550813.6549132,2.7468152046203613,2.7321248054504395
+create,slice,cf4c4c82-8728-4121-adf6-d66926603cbe,10589,2,5,3,1,2,1685550300.3353002,1685550302.8402987,1685550302.836117,2.5049984455108643,2.500816822052002
+create,service,28b41cb0-1a2c-4bfd-8351-0d2e8b8b3c61,8776,2,5,3,,,1685550302.8521,1685550305.315764,1685550305.311317,2.4636640548706055,2.459217071533203
+create,link,ef571839-bf44-494f-ab2e-c174d45d7be8,741,2,,,,,1685550305.3163998,1685550307.5657425,1685550307.5613973,2.249342679977417,2.244997501373291
+delete,slice,593b0301-821e-434e-b403-2b92dcf5a8c1,9191,2,5,3,2,1,1685550307.5664876,1685550309.93008,1685550309.9297,2.3635923862457275,2.3632123470306396
+get,device,afb1223f-17c9-4e92-96e6-447509c3fa68,18892,25,9,,,,1685550309.9314978,1685550310.1209204,,0.189422607421875,
+get,device,afb1223f-17c9-4e92-96e6-447509c3fa68,109575,36,93,,,,1685551466.4692376,1685551466.8118799,,0.34264230728149414,
+get,device,afb1223f-17c9-4e92-96e6-447509c3fa68,109575,36,93,,,,1685551658.0955942,1685551658.4246833,,0.3290891647338867,
+delete,link,4a4deddd-f3ff-4487-8956-ba39c8b6fafc,741,2,,,,,1685550310.121678,1685550312.369767,1685550312.3665457,2.248088836669922,2.2448675632476807
+delete,service,77fb7962-9d1f-4d1a-8b8d-302302e19d95,9156,2,5,3,,,1685550314.6144328,1685550316.9855075,1685550316.9847693,2.371074676513672,2.3703365325927734
+create,device,b7f8ac37-728f-4cfa-9410-7368e3362b47,46185,44,27,,,,1685550319.5570245,1685550322.3523915,1685550322.321176,2.7953670024871826,2.7641515731811523
+get,slice,cf4c4c82-8728-4121-adf6-d66926603cbe,10589,2,5,3,1,2,1685550322.3524618,1685550322.489348,,0.1368861198425293,
+get,service,f43c97f4-757e-4f9d-be38-f3a22963a4ba,9297,2,5,3,,,1685550322.4898577,1685550322.5666392,,0.0767815113067627,
+update,service,28b41cb0-1a2c-4bfd-8351-0d2e8b8b3c61,9382,2,5,3,,,1685550322.572062,1685550325.0109885,1685550325.0106094,2.4389264583587646,2.438547372817993
+get,slice,b0370781-5334-48f8-bdcc-780f8e6c6dba,10993,2,5,3,2,2,1685550325.0880363,1685550325.2221067,,0.13407039642333984,
+get,slice,b0370781-5334-48f8-bdcc-780f8e6c6dba,10993,2,5,3,2,2,1685550559.8972278,1685550560.0331693,,0.1359415054321289,
+update,slice,ec5d1823-664c-42a3-a103-ee21d2d63374,10534,2,5,3,0,2,1685550327.461768,1685550329.925234,1685550329.9136586,2.463466167449951,2.451890707015991
+create,device,577ed428-fb34-4498-9755-a5b0eb7924aa,37657,40,18,,,,1685550329.9479582,1685550332.7472126,1685550332.6953871,2.7992544174194336,2.7474288940429688
+delete,link,a9b843d7-7e23-453c-bf8b-4d981c6e7d3c,741,2,,,,,1685550332.7473834,1685550335.0399475,1685550335.038856,2.2925641536712646,2.2914726734161377
+create,link,80b370ea-cda3-4b0d-a774-62d4e35830c5,741,2,,,,,1685550335.0421836,1685550337.2908914,1685550337.278311,2.2487077713012695,2.2361273765563965
+delete,service,6ccddb88-8a57-44df-adac-9c677e1f5830,9697,2,5,3,,,1685550337.2913,1685550339.6595361,1685550339.65211,2.3682360649108887,2.3608100414276123
+delete,device,5d5861dc-c4ca-4d9d-a364-b13fcc3da64e,35782,5,33,,,,1685550339.6603284,1685550342.1677518,1685550342.155155,2.5074234008789062,2.494826555252075
+create,slice,3a0d00fa-b499-4ac7-89a2-c5d46d7f2695,11339,2,5,3,1,0,1685550342.1757324,1685550344.6410148,1685550344.6407473,2.465282440185547,2.465014934539795
+update,service,84a4219f-235f-48d5-8e98-36b8676b2319,10530,2,5,3,,,1685550344.647244,1685550347.1042554,1685550347.083055,2.4570114612579346,2.4358110427856445
+update,service,84a4219f-235f-48d5-8e98-36b8676b2319,10053,2,5,3,,,1685550570.700493,1685550573.1543097,1685550573.1490273,2.4538166522979736,2.4485342502593994
+update,service,84a4219f-235f-48d5-8e98-36b8676b2319,8616,2,5,3,,,1685551139.1604912,1685551141.5354795,1685551141.5314536,2.374988317489624,2.370962381362915
+update,service,84a4219f-235f-48d5-8e98-36b8676b2319,10271,2,5,3,,,1685551443.2201245,1685551445.6598728,1685551445.6582139,2.4397482872009277,2.438089370727539
+update,service,84a4219f-235f-48d5-8e98-36b8676b2319,9749,2,5,3,,,1685551504.5225418,1685551507.0313246,1685551506.9698813,2.5087828636169434,2.4473395347595215
+update,service,84a4219f-235f-48d5-8e98-36b8676b2319,10436,2,5,3,,,1685551534.920186,1685551537.3692672,1685551537.355651,2.4490811824798584,2.435464859008789
+get,device,9f260c4f-5ef4-4335-96fc-c6a736507fc5,31155,20,21,,,,1685550347.1224213,1685550347.32646,,0.2040386199951172,
+create,service,b20eeba9-3a19-4130-b0a7-13f1520790c6,10456,2,5,3,,,1685550347.333488,1685550349.7638218,1685550349.754552,2.4303338527679443,2.4210638999938965
+update,device,98b4c1d2-b816-46b7-be50-958c0427bf3a,66235,40,48,,,,1685550349.8001783,1685550352.6285968,1685550352.6168394,2.828418493270874,2.8166611194610596
+get,service,067d1016-4276-4748-9d7e-da23688878ba,10266,2,5,3,,,1685550352.628814,1685550352.7669961,,0.1381821632385254,
+get,service,067d1016-4276-4748-9d7e-da23688878ba,10370,2,5,3,,,1685550422.1986148,1685550422.330612,,0.13199710845947266,
+delete,slice,cb590c68-2855-4dfd-acbe-1ca813a73075,11295,2,5,3,1,2,1685550352.767872,1685550355.1473536,1685550355.142808,2.379481554031372,2.3749358654022217
+update,link,fff48345-6c85-40ed-b046-259c88a4fb63,741,2,,,,,1685550355.1488411,1685550357.3887453,1685550357.3877966,2.2399041652679443,2.238955497741699
+update,link,fff48345-6c85-40ed-b046-259c88a4fb63,741,2,,,,,1685550413.9648802,1685550416.2032273,1685550416.2024512,2.238347053527832,2.2375710010528564
+delete,link,aaafd56c-9bfd-4cfc-bac2-54ee9b3bd63a,741,2,,,,,1685550357.3891168,1685550359.633585,1685550359.6276627,2.2444682121276855,2.2385458946228027
+delete,slice,c06e93c6-2b0c-4072-b85d-5fc3d9b0c57c,8128,2,5,3,2,0,1685550359.7639782,1685550362.0638332,1685550362.06034,2.2998549938201904,2.2963616847991943
+get,device,98b4c1d2-b816-46b7-be50-958c0427bf3a,66235,40,48,,,,1685550362.0639215,1685550362.3370068,,0.273085355758667,
+create,device,b8a29228-6901-4de5-86d6-4b654ec360d7,28485,14,23,,,,1685550362.4258015,1685550365.1432765,1685550365.1358888,2.717474937438965,2.710087299346924
+delete,service,c2061031-8370-4d33-9ac1-d3bf999e51bf,9454,2,5,3,,,1685550365.143606,1685550367.5293117,1685550367.5217924,2.3857057094573975,2.3781864643096924
+get,slice,eb68b280-9e62-42d8-ba6b-2a5f80ec9762,9508,2,5,3,2,1,1685550367.5293872,1685550367.6635253,,0.1341381072998047,
+create,slice,659ad2b9-ca89-4f3b-80cb-b2fa70eb32ad,10489,2,5,3,2,0,1685550367.6700041,1685550370.1052654,1685550370.104947,2.4352612495422363,2.4349429607391357
+update,slice,3a0d00fa-b499-4ac7-89a2-c5d46d7f2695,11449,2,5,3,1,0,1685550370.125284,1685550372.6158636,1685550372.5575128,2.490579605102539,2.4322288036346436
+update,slice,3a0d00fa-b499-4ac7-89a2-c5d46d7f2695,10976,2,5,3,2,0,1685550568.223156,1685550570.6826756,1685550570.664366,2.459519624710083,2.4412100315093994
+update,slice,3a0d00fa-b499-4ac7-89a2-c5d46d7f2695,9437,2,5,3,0,2,1685551168.1751578,1685551170.6152072,1685551170.6149611,2.440049409866333,2.4398033618927
+update,device,b8a29228-6901-4de5-86d6-4b654ec360d7,87352,10,83,,,,1685550372.6598134,1685550375.8663957,1685550375.8068447,3.2065823078155518,3.147031307220459
+create,link,1d65d3c5-81a1-4780-a313-97609c641a3c,741,2,,,,,1685550375.8669047,1685550378.1097367,1685550378.1089785,2.2428319454193115,2.2420737743377686
+create,service,66c43203-5031-4330-b8d5-f591c91330e8,10707,2,5,3,,,1685550380.5673835,1685550383.0207121,1685550383.0159993,2.4533286094665527,2.448615789413452
+delete,device,3c7fac77-8bec-4ddf-9a12-ddd39021b95e,43125,19,36,,,,1685550383.024679,1685550385.5916643,1685550385.543437,2.5669853687286377,2.5187580585479736
+create,service,73b9d2e8-ce76-4e2b-baad-58294f62a891,10075,2,5,3,,,1685550385.596892,1685550388.073693,1685550388.072984,2.4768009185791016,2.4760918617248535
+delete,device,36423e04-0f15-4df7-9998-cd920eae3d68,95382,6,84,,,,1685550388.0761395,1685550390.857814,1685550390.8237884,2.78167462348938,2.7476489543914795
+delete,service,73b9d2e8-ce76-4e2b-baad-58294f62a891,10075,2,5,3,,,1685550390.858399,1685550393.2402112,1685550393.2342193,2.381812334060669,2.3758203983306885
+get,slice,1881e59c-a5e9-4039-9d62-f6e738e13081,12134,2,5,3,1,0,1685550393.2403018,1685550393.3808572,,0.14055538177490234,
+get,slice,1881e59c-a5e9-4039-9d62-f6e738e13081,8324,2,5,3,1,0,1685551787.3192759,1685551787.4526258,,0.13334989547729492,
+delete,slice,cf4c4c82-8728-4121-adf6-d66926603cbe,10589,2,5,3,1,2,1685550393.3822393,1685550395.768753,1685550395.7667854,2.3865137100219727,2.3845460414886475
+update,device,c596e0aa-a810-4b87-9228-565ffef37fd1,63923,38,44,,,,1685550395.7993546,1685550398.6450443,1685550398.635395,2.8456897735595703,2.836040496826172
+update,device,c596e0aa-a810-4b87-9228-565ffef37fd1,51041,24,42,,,,1685550848.3138278,1685550851.0931075,1685550851.0792415,2.7792797088623047,2.765413761138916
+create,link,dfedf91f-272e-4381-8d43-406b1740cc43,741,2,,,,,1685550398.6454697,1685550400.8843544,1685550400.8841236,2.238884687423706,2.2386538982391357
+create,device,07f42867-85af-4567-a785-7bc866a07f22,51375,40,28,,,,1685550400.9049487,1685550403.7164683,1685550403.6786172,2.8115196228027344,2.7736685276031494
+delete,link,50a0aedf-31d7-4e5a-9c8e-0c4554999141,741,2,,,,,1685550403.7168143,1685550405.9988961,1685550406.0008411,2.2820818424224854,2.284026861190796
+get,service,1c96b51c-6854-4198-9911-9044e0362420,9251,2,5,3,,,1685550406.0003273,1685550406.1377404,,0.13741302490234375,
+get,service,1c96b51c-6854-4198-9911-9044e0362420,10105,2,5,3,,,1685550922.0434058,1685550922.1751986,,0.13179278373718262,
+get,service,1c96b51c-6854-4198-9911-9044e0362420,8966,2,5,3,,,1685551249.625646,1685551249.7564323,,0.13078618049621582,
+get,service,1c96b51c-6854-4198-9911-9044e0362420,8966,2,5,3,,,1685551338.1325896,1685551338.2636228,,0.13103318214416504,
+get,service,1c96b51c-6854-4198-9911-9044e0362420,8966,2,5,3,,,1685551617.1008494,1685551617.2307167,,0.1298673152923584,
+update,slice,659ad2b9-ca89-4f3b-80cb-b2fa70eb32ad,12602,2,5,3,2,1,1685550406.1486647,1685550408.6131773,1685550408.6053162,2.464512586593628,2.456651449203491
+update,slice,659ad2b9-ca89-4f3b-80cb-b2fa70eb32ad,10403,2,5,3,0,2,1685551559.7114034,1685551562.243797,1685551562.1723835,2.53239369392395,2.460980176925659
+get,device,5ee8f843-6ea1-48f9-a2ed-fb784a22c936,95927,12,86,,,,1685550408.6132607,1685550408.9372394,,0.3239786624908447,
+create,slice,28cc7068-2a31-4369-b4ce-588da65eb720,10734,2,5,3,0,1,1685550411.4276521,1685550413.8777223,1685550413.8793142,2.4500701427459717,2.451662063598633
+get,link,7e07cff2-e2a0-4710-a591-a379d0394e8a,741,2,,,,,1685550413.8794851,1685550413.9643085,,0.0848233699798584,
+get,link,7e07cff2-e2a0-4710-a591-a379d0394e8a,741,2,,,,,1685550560.1132417,1685550560.1847064,,0.07146477699279785,
+get,link,7e07cff2-e2a0-4710-a591-a379d0394e8a,741,2,,,,,1685551058.386273,1685551058.4550903,,0.0688173770904541,
+get,link,7e07cff2-e2a0-4710-a591-a379d0394e8a,741,2,,,,,1685551385.4120762,1685551385.527852,,0.11577582359313965,
+get,device,b7f8ac37-728f-4cfa-9410-7368e3362b47,46185,44,27,,,,1685550416.2033257,1685550416.4973128,,0.2939870357513428,
+update,service,5689b23d-36b6-49eb-9173-c1e02007dac8,11526,2,5,3,,,1685550416.509656,1685550418.9600124,1685550418.9658504,2.4503564834594727,2.4561944007873535
+update,service,5689b23d-36b6-49eb-9173-c1e02007dac8,8811,2,5,3,,,1685550487.172153,1685550489.568455,1685550489.5626273,2.3963019847869873,2.390474319458008
+update,service,5689b23d-36b6-49eb-9173-c1e02007dac8,10015,2,5,3,,,1685550723.4660854,1685550725.920281,1685550725.918586,2.454195499420166,2.452500581741333
+update,service,5689b23d-36b6-49eb-9173-c1e02007dac8,9216,2,5,3,,,1685550816.048672,1685550818.4950573,1685550818.4354737,2.446385383605957,2.3868017196655273
+delete,link,20643d31-7ca0-4490-aff3-84e3dad48d43,741,2,,,,,1685550422.3310866,1685550424.5822027,1685550424.5796087,2.2511160373687744,2.2485220432281494
+create,link,d271bc58-52fb-425d-8802-2f97d0dd0354,741,2,,,,,1685550424.5827913,1685550426.8293443,1685550426.8303456,2.2465529441833496,2.247554302215576
+create,device,b94590bd-7b2f-474e-aed1-5797fd9545b5,19046,29,9,,,,1685550426.8397772,1685550429.437472,1685550429.4021788,2.5976948738098145,2.562401533126831
+delete,device,42aa7d03-0f2b-45e6-b994-437b9d20665f,83956,41,58,,,,1685550429.4400558,1685550432.1454666,1685550432.1299527,2.7054107189178467,2.689896821975708
+delete,service,067d1016-4276-4748-9d7e-da23688878ba,10370,2,5,3,,,1685550432.147278,1685550434.5581682,1685550434.5046895,2.4108901023864746,2.3574113845825195
+get,slice,28cc7068-2a31-4369-b4ce-588da65eb720,10734,2,5,3,0,1,1685550434.6281059,1685550434.7614787,,0.13337278366088867,
+get,slice,28cc7068-2a31-4369-b4ce-588da65eb720,10734,2,5,3,0,1,1685550479.6280637,1685550479.7635007,,0.13543701171875,
+delete,slice,8d03c0c9-548f-45ee-a67a-df52ebd76e09,10108,2,5,3,0,1,1685550434.7619572,1685550437.1305072,1685550437.1239307,2.3685500621795654,2.361973524093628
+create,slice,db417fef-aa4e-4f40-b5d7-6051c2e087ce,10994,2,5,3,0,2,1685550437.137937,1685550439.5964506,1685550439.5909142,2.4585134983062744,2.452977180480957
+update,slice,7b657e0d-cbbb-4f2f-8023-eda146380715,9274,2,5,3,2,0,1685550439.6083097,1685550442.0028746,1685550441.9932015,2.3945648670196533,2.3848917484283447
+update,slice,7b657e0d-cbbb-4f2f-8023-eda146380715,10028,2,5,3,0,0,1685550504.8089159,1685550507.307884,1685550507.259943,2.4989681243896484,2.4510271549224854
+update,slice,7b657e0d-cbbb-4f2f-8023-eda146380715,10466,2,5,3,1,1,1685551453.4828935,1685551455.9329088,1685551455.9279323,2.4500153064727783,2.4450387954711914
+create,service,f9dec2ea-1ed8-445a-8715-9ac1a79227f1,9445,2,5,3,,,1685550442.0068564,1685550444.4625957,1685550444.447972,2.4557392597198486,2.441115617752075
+update,link,80b370ea-cda3-4b0d-a774-62d4e35830c5,741,2,,,,,1685550444.4631493,1685550446.7106,1685550446.7082624,2.247450590133667,2.2451131343841553
+get,service,28b41cb0-1a2c-4bfd-8351-0d2e8b8b3c61,9382,2,5,3,,,1685550447.0068147,1685550447.088191,,0.08137631416320801,
+create,link,a365647e-c4d2-4140-83b9-a6262413c55a,741,2,,,,,1685550447.0887926,1685550449.3379328,1685550449.33292,2.2491402626037598,2.2441275119781494
+update,slice,68365487-5dd8-45c6-88e6-81395b8b03af,10796,2,5,3,2,2,1685550449.3452861,1685550451.7786105,1685550451.7742414,2.4333243370056152,2.428955316543579
+update,slice,68365487-5dd8-45c6-88e6-81395b8b03af,11266,2,5,3,1,0,1685550562.5525017,1685550565.0231714,1685550565.0062444,2.470669746398926,2.453742742538452
+delete,link,80b370ea-cda3-4b0d-a774-62d4e35830c5,741,2,,,,,1685550451.7789474,1685550454.0279782,1685550454.0273414,2.249030828475952,2.248394012451172
+create,device,39ab7e59-56c6-4e57-bdbb-d51f371f88ba,99671,11,89,,,,1685550454.079009,1685550457.2818873,1685550457.2239091,3.20287823677063,3.14490008354187
+create,slice,9b0563cd-1737-4239-b53c-d6056bcb784a,9723,2,5,3,1,0,1685550457.2984965,1685550459.7983608,1685550459.7463942,2.499864339828491,2.4478976726531982
+update,device,99c37cd3-fe36-477a-ae37-50a84b7152d7,34822,8,28,,,,1685550459.8151453,1685550462.464273,1685550462.4296753,2.649127721786499,2.614530086517334
+update,device,99c37cd3-fe36-477a-ae37-50a84b7152d7,80268,29,64,,,,1685550603.3608463,1685550606.403435,1685550606.3533823,3.042588710784912,2.9925360679626465
+update,device,99c37cd3-fe36-477a-ae37-50a84b7152d7,24497,38,9,,,,1685550952.836601,1685550955.4728768,1685550955.4615912,2.6362757682800293,2.624990224838257
+create,service,605b603c-4387-434a-ad97-26ccb39a825e,10455,2,5,3,,,1685550462.473416,1685550464.9275832,1685550464.9226809,2.454167127609253,2.4492647647857666
+delete,device,98b4c1d2-b816-46b7-be50-958c0427bf3a,66235,40,48,,,,1685550464.936675,1685550467.4787347,1685550467.4677136,2.5420596599578857,2.531038522720337
+delete,service,605b603c-4387-434a-ad97-26ccb39a825e,10455,2,5,3,,,1685550467.5546873,1685550469.9272065,1685550469.9239416,2.3725192546844482,2.3692543506622314
+delete,slice,db417fef-aa4e-4f40-b5d7-6051c2e087ce,10994,2,5,3,0,2,1685550469.9277363,1685550472.3492625,1685550472.2897937,2.4215261936187744,2.3620574474334717
+update,link,a365647e-c4d2-4140-83b9-a6262413c55a,741,2,,,,,1685550472.3496175,1685550474.5926845,1685550474.591522,2.2430670261383057,2.2419044971466064
+update,device,577ed428-fb34-4498-9755-a5b0eb7924aa,30481,25,19,,,,1685550476.9878244,1685550479.626806,1685550479.6043425,2.638981580734253,2.616518020629883
+update,device,577ed428-fb34-4498-9755-a5b0eb7924aa,43004,2,35,,,,1685550591.0277112,1685550593.7600775,1685550593.7560158,2.7323663234710693,2.728304624557495
+get,link,55626570-a1a2-47b1-91ab-46b874877970,741,2,,,,,1685550479.763794,1685550479.8403924,,0.0765984058380127,
+delete,service,1fee4ddb-78ef-42e6-8e7a-b913007c4011,8881,2,5,3,,,1685550479.8410115,1685550482.186678,1685550482.189036,2.3456664085388184,2.348024368286133
+delete,device,ee8073f2-5d01-406a-9ca7-0b4dfcfab8e3,66154,9,56,,,,1685550482.1883843,1685550484.7380188,1685550484.7243059,2.5496344566345215,2.535921573638916
+get,device,b94590bd-7b2f-474e-aed1-5797fd9545b5,19046,29,9,,,,1685550484.7382042,1685550484.9277196,,0.1895153522491455,
+get,device,b94590bd-7b2f-474e-aed1-5797fd9545b5,19834,40,4,,,,1685550914.3073373,1685550914.4953208,,0.18798351287841797,
+get,device,b94590bd-7b2f-474e-aed1-5797fd9545b5,85539,42,62,,,,1685551332.9049885,1685551333.2195666,,0.3145780563354492,
+get,device,b94590bd-7b2f-474e-aed1-5797fd9545b5,58719,33,44,,,,1685551549.8434813,1685551550.113342,,0.26986074447631836,
+delete,link,a365647e-c4d2-4140-83b9-a6262413c55a,741,2,,,,,1685550484.9328923,1685550487.1680388,1685550487.1663384,2.2351465225219727,2.2334461212158203
+create,service,d0e54d24-d889-441e-a715-0cbad2d11fa3,7697,2,5,3,,,1685550491.825146,1685550494.2136204,1685550494.2057388,2.388474464416504,2.3805928230285645
+delete,slice,e65081e8-b0b5-4a33-b5e2-2b992082f43b,9563,2,5,3,2,1,1685550494.2140882,1685550496.5746298,1685550496.5742562,2.360541582107544,2.360167980194092
+create,device,525568d8-97c0-43e4-914a-76ee7812b5f4,81435,45,53,,,,1685550496.6267214,1685550499.770813,1685550499.7209685,3.1440916061401367,3.0942471027374268
+create,link,222ed7f2-09a2-4e77-bf8c-695277d91ebc,741,2,,,,,1685550499.7720494,1685550502.101469,1685550502.0972588,2.3294196128845215,2.325209379196167
+get,service,d821bc57-a163-475c-9d68-36fbb1fe6761,9243,2,5,3,,,1685550502.101637,1685550502.3148277,,0.21319079399108887,
+create,slice,50ac303c-ff60-4178-9fe8-0f14f490e8fb,10810,2,5,3,1,1,1685550502.320301,1685550504.8047311,1685550504.8039105,2.4844300746917725,2.483609437942505
+create,link,1150c44f-e2b0-4253-a0c3-99b76cc407bd,741,2,,,,,1685550507.3094447,1685550509.570104,1685550509.5581036,2.2606592178344727,2.2486588954925537
+delete,service,9fae51b2-e0d6-41f4-bd58-7ce0554d961e,9794,2,5,3,,,1685550509.5706525,1685550511.9294245,1685550511.9276779,2.358772039413452,2.357025384902954
+create,slice,d6a04b89-0ac3-48b6-aeb2-6458d0b46965,6936,2,5,3,0,0,1685550511.936025,1685550514.306634,1685550514.3016493,2.3706090450286865,2.36562442779541
+update,device,b94590bd-7b2f-474e-aed1-5797fd9545b5,19834,40,4,,,,1685550514.384621,1685550516.9685848,1685550516.9381785,2.5839638710021973,2.5535576343536377
+update,device,b94590bd-7b2f-474e-aed1-5797fd9545b5,85539,42,62,,,,1685550995.879246,1685550998.877951,1685550998.845862,2.9987049102783203,2.966615915298462
+update,device,b94590bd-7b2f-474e-aed1-5797fd9545b5,25434,37,9,,,,1685551382.792228,1685551385.411789,1685551385.405473,2.619560956954956,2.6132450103759766
+update,device,b94590bd-7b2f-474e-aed1-5797fd9545b5,58719,33,44,,,,1685551529.7547622,1685551532.6512415,1685551532.6352994,2.896479368209839,2.880537271499634
+update,device,b94590bd-7b2f-474e-aed1-5797fd9545b5,66669,33,47,,,,1685551718.7856696,1685551721.6420565,1685551721.6278722,2.85638689994812,2.842202663421631
+create,service,8d967c00-0dc9-44a8-930b-00ee1618be83,12076,2,5,3,,,1685550516.9779809,1685550519.4832637,1685550519.425702,2.5052828788757324,2.447721242904663
+delete,slice,bfa726f4-bbd3-467b-bc83-86a0727a1b1f,10799,2,5,3,2,0,1685550519.4839902,1685550521.8419538,1685550521.8398185,2.3579635620117188,2.355828285217285
+create,device,22a06d03-fce8-404d-a0c1-4343a65c2e6b,123576,32,96,,,,1685550521.903221,1685550525.2427413,1685550525.0624714,3.3395204544067383,3.159250497817993
+update,slice,d6a04b89-0ac3-48b6-aeb2-6458d0b46965,9042,2,5,3,2,1,1685550525.2552636,1685550527.648764,1685550527.645659,2.393500328063965,2.390395402908325
+update,slice,d6a04b89-0ac3-48b6-aeb2-6458d0b46965,9506,2,5,3,0,1,1685550651.163375,1685550653.5956545,1685550653.5952215,2.432279586791992,2.4318466186523438
+update,service,e8fa19fc-b095-4669-a5b4-f2bbb734986e,9555,2,5,3,,,1685550527.6548903,1685550530.096194,1685550530.0956326,2.4413037300109863,2.440742254257202
+update,service,e8fa19fc-b095-4669-a5b4-f2bbb734986e,9770,2,5,3,,,1685550803.8460908,1685550806.282188,1685550806.2745142,2.4360971450805664,2.4284234046936035
+get,slice,d6a04b89-0ac3-48b6-aeb2-6458d0b46965,9042,2,5,3,2,1,1685550532.7292173,1685550532.8107772,,0.08155989646911621,
+delete,device,b7f8ac37-728f-4cfa-9410-7368e3362b47,46185,44,27,,,,1685550532.8155334,1685550535.3899953,1685550535.328728,2.5744619369506836,2.5131945610046387
+delete,link,84a7d7e6-5c4b-4923-acae-9eb8abd96862,741,2,,,,,1685550535.3905647,1685550537.6795607,1685550537.677427,2.2889959812164307,2.286862373352051
+get,device,0c7f43c2-472a-472a-bf6c-7bf3f679ff1b,107029,7,91,,,,1685550537.8167381,1685550538.0758832,,0.25914502143859863,
+delete,service,8d967c00-0dc9-44a8-930b-00ee1618be83,12076,2,5,3,,,1685550538.076926,1685550540.4536722,1685550540.4464095,2.37674617767334,2.369483470916748
+create,device,6714973a-47d2-42ea-b3ae-d534417ef4a1,40200,44,21,,,,1685550540.471022,1685550543.1574442,1685550543.1293805,2.686422348022461,2.658358573913574
+delete,device,5ee8f843-6ea1-48f9-a2ed-fb784a22c936,95927,12,86,,,,1685550543.160404,1685550545.837945,1685550545.8262174,2.6775410175323486,2.665813446044922
+create,link,05f45466-19ea-481f-89f4-4ad6d56a8733,741,2,,,,,1685550545.8398275,1685550548.0848372,1685550548.0844946,2.245009660720825,2.2446670532226562
+delete,link,284aff57-0ec0-4075-adbb-ea02a3ca4db8,741,2,,,,,1685550550.3261461,1685550552.5769517,1685550552.5709438,2.250805616378784,2.244797706604004
+create,service,fcc06dc3-937d-498a-a486-2a4418ef58eb,9886,2,5,3,,,1685550552.5829797,1685550555.047591,1685550555.0538204,2.464611291885376,2.4708406925201416
+update,service,d0e54d24-d889-441e-a715-0cbad2d11fa3,8902,2,5,3,,,1685550555.0535338,1685550557.4864738,1685550557.4709878,2.4329400062561035,2.4174540042877197
+create,slice,f287822a-5841-45ae-96d1-19b38c272599,9120,2,5,3,1,1,1685550557.4935524,1685550559.8971574,1685550559.886293,2.4036049842834473,2.392740488052368
+delete,slice,28cc7068-2a31-4369-b4ce-588da65eb720,10734,2,5,3,0,1,1685550560.18512,1685550562.5447235,1685550562.5372884,2.3596034049987793,2.352168321609497
+create,device,ae8f46d0-fb10-4b2f-a2c0-52532842b959,99114,47,72,,,,1685550573.2162163,1685550576.345245,1685550576.312768,3.129028558731079,3.0965516567230225
+delete,device,9f260c4f-5ef4-4335-96fc-c6a736507fc5,31155,20,21,,,,1685550576.487864,1685550579.0000534,1685550578.993714,2.5121893882751465,2.505850076675415
+create,link,2e5f5944-bc06-4774-b752-90846c2365ee,741,2,,,,,1685550579.0005834,1685550581.2432537,1685550581.2350266,2.2426702976226807,2.234443187713623
+delete,slice,ec5d1823-664c-42a3-a103-ee21d2d63374,10534,2,5,3,0,2,1685550581.2438364,1685550583.6218605,1685550583.6224146,2.378024101257324,2.3785781860351562
+update,link,e9b46e15-c039-4ae8-a130-12f6413d4c91,741,2,,,,,1685550583.6222258,1685550585.8850057,1685550585.8847926,2.262779951095581,2.2625668048858643
+update,link,e9b46e15-c039-4ae8-a130-12f6413d4c91,741,2,,,,,1685550690.5460968,1685550692.780961,1685550692.775441,2.2348642349243164,2.229344129562378
+update,link,e9b46e15-c039-4ae8-a130-12f6413d4c91,741,2,,,,,1685550823.9793406,1685550826.2253237,1685550826.2206693,2.245983123779297,2.241328716278076
+update,link,e9b46e15-c039-4ae8-a130-12f6413d4c91,741,2,,,,,1685550892.3746967,1685550894.6200345,1685550894.6142182,2.245337724685669,2.2395215034484863
+update,link,e9b46e15-c039-4ae8-a130-12f6413d4c91,741,2,,,,,1685551307.2850761,1685551309.53871,1685551309.5337927,2.253633975982666,2.2487165927886963
+delete,link,55626570-a1a2-47b1-91ab-46b874877970,741,2,,,,,1685550585.886329,1685550588.1781826,1685550588.1779482,2.291853666305542,2.291619300842285
+create,service,08a939f5-96c5-4cf5-9600-8dda7db9540b,10228,2,5,3,,,1685550588.2011142,1685550590.707342,1685550590.6594126,2.506227731704712,2.458298444747925
+get,device,661dcc5e-0a40-4afb-9919-040603a8e6df,20001,25,10,,,,1685550590.707443,1685550590.9267702,,0.21932721138000488,
+get,link,05f45466-19ea-481f-89f4-4ad6d56a8733,741,2,,,,,1685550590.9272094,1685550590.9956372,,0.06842780113220215,
+create,slice,f909be73-5686-41e1-a9de-e7a6214365dc,11790,2,5,3,0,2,1685550593.770059,1685550596.2376535,1685550596.2211113,2.4675943851470947,2.451052188873291
+get,service,5df2cd3c-b0ec-417c-bd97-f70b411d8933,8216,2,5,3,,,1685550596.2377582,1685550596.3734918,,0.13573360443115234,
+get,service,5df2cd3c-b0ec-417c-bd97-f70b411d8933,8216,2,5,3,,,1685550669.7313838,1685550669.8747811,,0.14339733123779297,
+delete,service,15163e30-c7e0-412b-8b3b-4063d5744989,7653,2,5,3,,,1685550596.3742797,1685550598.6808228,1685550598.6805983,2.3065431118011475,2.306318521499634
+delete,service,28b41cb0-1a2c-4bfd-8351-0d2e8b8b3c61,9382,2,5,3,,,1685550598.681143,1685550601.0575805,1685550601.0505888,2.3764374256134033,2.36944580078125
+update,link,d271bc58-52fb-425d-8802-2f97d0dd0354,741,2,,,,,1685550601.0581305,1685550603.303411,1685550603.3046741,2.2452805042266846,2.2465436458587646
+create,link,e3fa60ea-e185-4563-ad59-0a42b4858aaf,741,2,,,,,1685550606.404975,1685550608.6609712,1685550608.6558678,2.2559962272644043,2.2508928775787354
+create,device,0284f7fc-e39c-4a2d-b9b2-709bc0e64055,13819,24,4,,,,1685550608.6667597,1685550611.213353,1685550611.2082105,2.546593189239502,2.5414507389068604
+delete,link,2e5f5944-bc06-4774-b752-90846c2365ee,741,2,,,,,1685550613.7291458,1685550616.007671,1685550616.0094345,2.2785253524780273,2.2802886962890625
+get,service,f9dec2ea-1ed8-445a-8715-9ac1a79227f1,9445,2,5,3,,,1685550616.083874,1685550616.22379,,0.13991594314575195,
+delete,slice,f287822a-5841-45ae-96d1-19b38c272599,9120,2,5,3,1,1,1685550616.2247393,1685550618.589937,1685550618.5892851,2.3651976585388184,2.3645458221435547
+delete,device,525568d8-97c0-43e4-914a-76ee7812b5f4,81435,45,53,,,,1685550618.5935695,1685550621.2725532,1685550621.2399333,2.678983688354492,2.6463637351989746
+update,service,e7f4fc97-2269-4126-ac29-7f1deaef6ba3,8386,2,5,3,,,1685550621.2777705,1685550623.6757681,1685550623.6635904,2.3979976177215576,2.385819911956787
+create,service,a371c75e-20ba-4ef6-8b8a-3f3e6f7113bc,9636,2,5,3,,,1685550623.6849232,1685550626.1316512,1685550626.1271868,2.446727991104126,2.442263603210449
+create,slice,e97a29ff-da64-434c-a0ab-77c170ba8fc1,10048,2,5,3,1,0,1685550626.1366546,1685550628.6324508,1685550628.6319103,2.4957962036132812,2.495255708694458
+get,device,39ab7e59-56c6-4e57-bdbb-d51f371f88ba,99671,11,89,,,,1685550628.8048666,1685550629.0693378,,0.26447129249572754,
+create,service,3e53367a-7f68-4bd0-a45e-cd10a5da70a8,11170,2,5,3,,,1685550629.0749924,1685550631.6217895,1685550631.6210074,2.546797037124634,2.5460150241851807
+delete,slice,68365487-5dd8-45c6-88e6-81395b8b03af,11266,2,5,3,1,0,1685550631.6238332,1685550634.002922,1685550634.0091488,2.379088878631592,2.3853156566619873
+delete,device,39ab7e59-56c6-4e57-bdbb-d51f371f88ba,99671,11,89,,,,1685550634.0063717,1685550636.7115128,1685550636.7025926,2.705141067504883,2.696220874786377
+update,link,222ed7f2-09a2-4e77-bf8c-695277d91ebc,741,2,,,,,1685550636.7121713,1685550638.9495637,1685550638.9484599,2.2373924255371094,2.236288547515869
+update,link,222ed7f2-09a2-4e77-bf8c-695277d91ebc,741,2,,,,,1685550733.1400878,1685550735.3983786,1685550735.3981068,2.2582907676696777,2.258018970489502
+create,link,d55d720a-ce46-4da3-91aa-5e895bc3b040,741,2,,,,,1685550638.9500895,1685550641.2041965,1685550641.1963658,2.2541069984436035,2.246276378631592
+create,slice,3a0a64c6-88ef-4d25-ac3b-b57daf8b18ad,9972,2,5,3,0,2,1685550641.4984772,1685550643.936316,1685550643.9272711,2.4378387928009033,2.4287939071655273
+get,link,dfedf91f-272e-4381-8d43-406b1740cc43,741,2,,,,,1685550643.9363897,1685550644.0076382,,0.07124853134155273,
+get,slice,3a0d00fa-b499-4ac7-89a2-c5d46d7f2695,10976,2,5,3,2,0,1685550644.0077531,1685550644.1426613,,0.13490819931030273,
+get,slice,3a0d00fa-b499-4ac7-89a2-c5d46d7f2695,10976,2,5,3,2,0,1685550799.0142639,1685550799.100282,,0.08601808547973633,
+get,slice,3a0d00fa-b499-4ac7-89a2-c5d46d7f2695,9437,2,5,3,0,2,1685551438.343692,1685551438.4787898,,0.13509774208068848,
+delete,link,cdd7dd85-2fa5-44fc-bae6-5f16c68662bb,741,2,,,,,1685550644.1430824,1685550646.3885002,1685550646.3867505,2.245417833328247,2.2436680793762207
+delete,service,f9dec2ea-1ed8-445a-8715-9ac1a79227f1,9445,2,5,3,,,1685550646.3906236,1685550648.7509243,1685550648.7501757,2.3603007793426514,2.3595521450042725
+update,service,fcc06dc3-937d-498a-a486-2a4418ef58eb,7961,2,5,3,,,1685550648.757892,1685550651.1578774,1685550651.1574323,2.3999855518341064,2.399540424346924
+create,device,af25e5f0-f8b9-4ca8-85bf-4e829b7f425f,110912,14,94,,,,1685550656.8424258,1685550660.0756,1685550660.0590515,3.2331740856170654,3.216625690460205
+delete,link,1150c44f-e2b0-4253-a0c3-99b76cc407bd,741,2,,,,,1685550660.1495445,1685550662.447578,1685550662.4450614,2.2980334758758545,2.2955169677734375
+update,service,1c96b51c-6854-4198-9911-9044e0362420,10105,2,5,3,,,1685550662.4533415,1685550664.8976347,1685550664.8928156,2.444293260574341,2.439474105834961
+update,service,1c96b51c-6854-4198-9911-9044e0362420,8966,2,5,3,,,1685551071.3559587,1685551073.7460334,1685551073.7401352,2.3900747299194336,2.38417649269104
+update,slice,e97a29ff-da64-434c-a0ab-77c170ba8fc1,10287,2,5,3,2,2,1685550667.2814002,1685550669.7312977,1685550669.7310052,2.449897527694702,2.4496049880981445
+delete,service,5df2cd3c-b0ec-417c-bd97-f70b411d8933,8216,2,5,3,,,1685550669.8755403,1685550672.1812778,1685550672.1757388,2.3057374954223633,2.300198554992676
+delete,slice,d462c4e3-9ab0-41a3-9cb5-2f4416f50e65,9721,2,5,3,0,0,1685550672.1817918,1685550674.5538025,1685550674.548111,2.3720107078552246,2.366319179534912
+create,device,b522fa4b-ead4-4e0e-998f-5590367daacd,33037,2,31,,,,1685550674.5787737,1685550677.2432566,1685550677.1813717,2.664482831954956,2.602597951889038
+delete,device,07f42867-85af-4567-a785-7bc866a07f22,51375,40,28,,,,1685550677.2487116,1685550679.8465586,1685550679.7962077,2.5978469848632812,2.5474960803985596
+get,device,577ed428-fb34-4498-9755-a5b0eb7924aa,43004,2,35,,,,1685550679.8466856,1685550680.1492171,,0.30253148078918457,
+create,link,610fb821-120d-4846-a650-194e83c8222a,741,2,,,,,1685550680.1498158,1685550682.408157,1685550682.4079137,2.2583413124084473,2.2580978870391846
+create,service,d42815ac-d056-4f85-8424-df9bcfa69713,9662,2,5,3,,,1685550682.4136198,1685550684.8981965,1685550684.89754,2.48457670211792,2.4839203357696533
+create,slice,256915b4-c08b-4db0-a87f-692a25b85c96,9830,2,5,3,1,2,1685550684.9063177,1685550687.3418984,1685550687.3351996,2.4355807304382324,2.428881883621216
+update,device,6714973a-47d2-42ea-b3ae-d534417ef4a1,99878,21,80,,,,1685550687.4231057,1685550690.5455794,1685550690.53904,3.12247371673584,3.115934371948242
+update,device,6714973a-47d2-42ea-b3ae-d534417ef4a1,52294,35,31,,,,1685550735.4350543,1685550738.2521186,1685550738.2004693,2.8170642852783203,2.7654149532318115
+update,device,6714973a-47d2-42ea-b3ae-d534417ef4a1,71122,31,52,,,,1685550962.902186,1685550965.849191,1685550965.7813506,2.947005033493042,2.879164695739746
+get,slice,e97a29ff-da64-434c-a0ab-77c170ba8fc1,10287,2,5,3,2,2,1685550695.1579986,1685550695.2884676,,0.13046908378601074,
+delete,link,ef571839-bf44-494f-ab2e-c174d45d7be8,741,2,,,,,1685550695.2891338,1685550697.57811,1685550697.5727446,2.2889761924743652,2.2836108207702637
+delete,device,99deb416-cc4c-431d-b6f4-49d259892872,95732,21,79,,,,1685550697.582332,1685550700.2675889,1685550700.2596369,2.6852569580078125,2.677304983139038
+update,slice,eb68b280-9e62-42d8-ba6b-2a5f80ec9762,10675,2,5,3,0,2,1685550700.272134,1685550702.7659228,1685550702.7163594,2.493788719177246,2.444225311279297
+create,service,681e1b10-7724-40b8-a396-916e7359b7cd,10537,2,5,3,,,1685550702.846387,1685550705.3481965,1685550705.3467093,2.501809597015381,2.5003223419189453
+create,link,1d420a47-6210-41b6-a6d3-b5308c854b0a,741,2,,,,,1685550705.349473,1685550707.6111765,1685550707.6077607,2.2617034912109375,2.2582876682281494
+delete,slice,aea81204-2f55-40a1-b304-97dc970e8ad4,10404,2,5,3,0,2,1685550710.6097653,1685550712.9700482,1685550712.9684577,2.3602828979492188,2.3586924076080322
+create,device,1d03df33-0ddb-4aff-82e3-622ecd9c8e40,101978,35,78,,,,1685550713.0316927,1685550716.1845834,1685550716.1318634,3.152890682220459,3.100170612335205
+create,slice,29b61621-7a69-4d6d-840a-d46afcc736c8,9034,2,5,3,1,2,1685550716.190619,1685550718.6035244,1685550718.5868027,2.41290545463562,2.396183729171753
+delete,service,d42815ac-d056-4f85-8424-df9bcfa69713,9662,2,5,3,,,1685550718.6039236,1685550720.9696257,1685550720.9592001,2.3657021522521973,2.355276584625244
+create,link,c0a4648c-d9dc-4056-9d26-2383affdc25b,741,2,,,,,1685550720.9702196,1685550723.2578056,1685550723.2516484,2.287585973739624,2.281428813934326
+get,device,b522fa4b-ead4-4e0e-998f-5590367daacd,33037,2,31,,,,1685550723.257938,1685550723.4602132,,0.20227527618408203,
+get,device,b522fa4b-ead4-4e0e-998f-5590367daacd,33037,2,31,,,,1685550750.859701,1685550751.0105183,,0.1508173942565918,
+get,device,b522fa4b-ead4-4e0e-998f-5590367daacd,33037,2,31,,,,1685551124.4229808,1685551124.67701,,0.2540292739868164,
+get,link,aa9a1963-99a7-4ac4-a548-8c45a89f302c,741,2,,,,,1685550725.922769,1685550725.9938045,,0.07103538513183594,
+create,service,1f9516ef-3cd2-491b-b8b8-e89745848e31,9046,2,5,3,,,1685550725.9997745,1685550728.3926327,1685550728.3943694,2.3928582668304443,2.39459490776062
+delete,slice,d6a04b89-0ac3-48b6-aeb2-6458d0b46965,9506,2,5,3,0,1,1685550728.39316,1685550730.7495656,1685550730.7440388,2.35640549659729,2.3508787155151367
+update,slice,f909be73-5686-41e1-a9de-e7a6214365dc,8540,2,5,3,2,2,1685550730.7564301,1685550733.1395452,1685550733.1271703,2.38311505317688,2.3707401752471924
+update,slice,f909be73-5686-41e1-a9de-e7a6214365dc,8666,2,5,3,2,2,1685550751.0161364,1685550753.4163308,1685550753.41311,2.4001944065093994,2.3969736099243164
+create,device,4bfdce86-e067-4213-9889-5a0c167b0033,30776,39,12,,,,1685550738.270338,1685550741.0082612,1685550740.9780226,2.7379231452941895,2.7076845169067383
+delete,service,d821bc57-a163-475c-9d68-36fbb1fe6761,9243,2,5,3,,,1685550741.0086708,1685550743.3770738,1685550743.3764577,2.3684029579162598,2.3677868843078613
+create,slice,872e88d0-6974-4446-92e7-df91712483d2,8372,2,5,3,0,1,1685550743.3817174,1685550745.8246338,1685550745.7840369,2.4429163932800293,2.4023194313049316
+delete,link,05f45466-19ea-481f-89f4-4ad6d56a8733,741,2,,,,,1685550745.8248546,1685550748.0789561,1685550748.0786026,2.254101514816284,2.2537479400634766
+get,slice,a541a2ea-841a-4932-b85f-f9792a94ee71,10145,2,5,3,1,0,1685550748.0828073,1685550748.2217884,,0.13898110389709473,
+get,service,4cf798e2-733b-4a43-8d9a-4d2236c2edbf,9214,2,5,3,,,1685550748.2221658,1685550748.347939,,0.12577319145202637,
+delete,device,0c7f43c2-472a-472a-bf6c-7bf3f679ff1b,18191,3,15,,,,1685550748.3495843,1685550750.7280738,1685550750.7249413,2.3784894943237305,2.375356912612915
+get,slice,6f118951-0466-4fe0-abed-13dc87750d52,9145,2,5,3,0,1,1685550750.7282033,1685550750.8594873,,0.13128399848937988,
+get,slice,6f118951-0466-4fe0-abed-13dc87750d52,10137,2,5,3,2,1,1685551006.17841,1685551006.3096883,,0.13127827644348145,
+get,slice,6f118951-0466-4fe0-abed-13dc87750d52,10553,2,5,3,1,0,1685551187.545815,1685551187.6797235,,0.13390851020812988,
+get,slice,6f118951-0466-4fe0-abed-13dc87750d52,10553,2,5,3,1,0,1685551741.1793468,1685551741.3175316,,0.1381847858428955,
+delete,service,c6f2cd89-0ec1-4409-a4f0-d9ddb9f3655c,10447,2,5,3,,,1685550753.4167194,1685550755.760989,1685550755.755391,2.3442695140838623,2.3386714458465576
+get,service,b20eeba9-3a19-4130-b0a7-13f1520790c6,10456,2,5,3,,,1685550755.7614307,1685550755.9002733,,0.13884258270263672,
+update,link,7e07cff2-e2a0-4710-a591-a379d0394e8a,741,2,,,,,1685550755.9008164,1685550758.1527848,1685550758.1519997,2.2519683837890625,2.251183271408081
+update,link,7e07cff2-e2a0-4710-a591-a379d0394e8a,741,2,,,,,1685551207.971188,1685551210.2153375,1685551210.2100165,2.2441494464874268,2.238828420639038
+update,link,7e07cff2-e2a0-4710-a591-a379d0394e8a,741,2,,,,,1685551362.7377894,1685551364.9959843,1685551365.0014572,2.258194923400879,2.2636678218841553
+create,link,251c4999-632c-4540-aabb-1f1f1d389f61,741,2,,,,,1685550758.153162,1685550760.3849015,1685550760.384074,2.2317395210266113,2.23091197013855
+delete,link,d55d720a-ce46-4da3-91aa-5e895bc3b040,741,2,,,,,1685550760.3873591,1685550762.6298718,1685550762.635375,2.2425127029418945,2.248015880584717
+update,service,3e53367a-7f68-4bd0-a45e-cd10a5da70a8,9368,2,5,3,,,1685550762.636928,1685550765.0891392,1685550765.0762482,2.4522111415863037,2.4393200874328613
+create,service,485bc2cb-df52-495a-a0cc-848225b7d205,10330,2,5,3,,,1685550768.0600255,1685550770.5588593,1685550770.506952,2.4988338947296143,2.4469265937805176
+delete,slice,e97a29ff-da64-434c-a0ab-77c170ba8fc1,10287,2,5,3,2,2,1685550770.5593154,1685550772.91738,1685550772.9134386,2.358064651489258,2.354123115539551
+get,link,c0a4648c-d9dc-4056-9d26-2383affdc25b,741,2,,,,,1685550772.918758,1685550772.988539,,0.06978106498718262,
+create,slice,4a316935-9f81-40e2-8878-37199401e6dd,10154,2,5,3,1,0,1685550772.9980354,1685550775.4430864,1685550775.433754,2.4450509548187256,2.435718536376953
+create,device,3c8527a8-5acb-4e19-8676-4dbbd660bfec,25242,24,13,,,,1685550775.4522061,1685550778.0524786,1685550778.0518928,2.6002724170684814,2.599686622619629
+delete,device,577ed428-fb34-4498-9755-a5b0eb7924aa,43004,2,35,,,,1685550778.053671,1685550780.5609472,1685550780.550464,2.5072762966156006,2.496793031692505
+create,link,7f634e4a-9c91-4f47-ace3-8160163d5b71,741,2,,,,,1685550780.5612812,1685550782.8170054,1685550782.8057206,2.2557241916656494,2.2444393634796143
+delete,device,22a06d03-fce8-404d-a0c1-4343a65c2e6b,123576,32,96,,,,1685550782.8226166,1685550785.7235692,1685550785.7016776,2.9009525775909424,2.879060983657837
+delete,service,3e53367a-7f68-4bd0-a45e-cd10a5da70a8,9368,2,5,3,,,1685550785.7247322,1685550788.1351655,1685550788.1334372,2.410433292388916,2.408704996109009
+create,service,5e9d65a0-e8b9-4162-b33e-7ad92278ef09,8910,2,5,3,,,1685550788.140742,1685550790.5342426,1685550790.525332,2.393500566482544,2.384589910507202
+create,device,b3b6674d-2372-4e3e-b0ca-62fe85aad1b9,11778,8,7,,,,1685550790.5404928,1685550793.0035348,1685550792.9977882,2.4630420207977295,2.4572954177856445
+create,slice,5b2a4a62-41e2-4b9a-a314-4b1198dead8e,10587,2,5,3,2,1,1685550793.0165036,1685550795.471652,1685550795.455722,2.455148458480835,2.439218521118164
+update,device,afb1223f-17c9-4e92-96e6-447509c3fa68,89722,25,66,,,,1685550795.5258641,1685550798.6011183,1685550798.5402563,3.075254201889038,3.014392137527466
+update,device,afb1223f-17c9-4e92-96e6-447509c3fa68,109575,36,93,,,,1685551354.9775648,1685551358.0949023,1685551358.0936425,3.117337465286255,3.1160776615142822
+update,device,afb1223f-17c9-4e92-96e6-447509c3fa68,33713,13,24,,,,1685551795.1093347,1685551797.7603474,1685551797.7564886,2.651012659072876,2.647153854370117
+get,service,e7f4fc97-2269-4126-ac29-7f1deaef6ba3,8386,2,5,3,,,1685550798.6729412,1685550798.8070512,,0.1341099739074707,
+get,device,c596e0aa-a810-4b87-9228-565ffef37fd1,63923,38,44,,,,1685550798.8074532,1685550799.013578,,0.20612478256225586,
+delete,link,c0a4648c-d9dc-4056-9d26-2383affdc25b,741,2,,,,,1685550799.1018875,1685550801.3851962,1685550801.3836772,2.283308744430542,2.281789779663086
+delete,slice,3c640fb4-1a1f-4bf6-9d33-c3a6c8419993,9956,2,5,3,2,1,1685550806.2830472,1685550808.6508653,1685550808.6499968,2.3678181171417236,2.3669495582580566
+update,link,e3fa60ea-e185-4563-ad59-0a42b4858aaf,741,2,,,,,1685550808.651393,1685550810.8923666,1685550810.8889835,2.240973711013794,2.2375905513763428
+update,link,e3fa60ea-e185-4563-ad59-0a42b4858aaf,741,2,,,,,1685551011.2938614,1685551013.524,1685551013.5237305,2.2301385402679443,2.2298691272735596
+delete,device,b3b6674d-2372-4e3e-b0ca-62fe85aad1b9,11778,8,7,,,,1685550813.6714926,1685550816.043067,1685550816.0395226,2.3715744018554688,2.368030071258545
+delete,slice,f909be73-5686-41e1-a9de-e7a6214365dc,8666,2,5,3,2,2,1685550818.4956303,1685550820.8580542,1685550820.8582947,2.362423896789551,2.3626644611358643
+get,link,0db95318-dc3e-47ff-8022-3c310a253988,741,2,,,,,1685550820.858148,1685550820.9286587,,0.0705106258392334,
+get,link,0db95318-dc3e-47ff-8022-3c310a253988,741,2,,,,,1685551151.6092107,1685551151.6795316,,0.07032084465026855,
+get,link,0db95318-dc3e-47ff-8022-3c310a253988,741,2,,,,,1685551537.3694084,1685551537.441504,,0.07209563255310059,
+create,device,96369cd2-50cd-41d3-8979-84b89599fc9a,63786,39,44,,,,1685550820.9620326,1685550823.8399732,1685550823.8268414,2.8779406547546387,2.8648087978363037
+get,slice,9b0563cd-1737-4239-b53c-d6056bcb784a,9723,2,5,3,1,0,1685550823.840124,1685550823.978834,,0.13871002197265625,
+delete,service,5689b23d-36b6-49eb-9173-c1e02007dac8,9216,2,5,3,,,1685550826.226086,1685550828.591027,1685550828.585219,2.364941120147705,2.359133005142212
+delete,link,7f634e4a-9c91-4f47-ace3-8160163d5b71,741,2,,,,,1685550828.888083,1685550831.1438293,1685550831.1433332,2.255746364593506,2.2552502155303955
+create,slice,1b236860-168e-43cb-8d8f-496ef0fbd406,9511,2,5,3,2,2,1685550831.1513534,1685550833.6466064,1685550833.6300719,2.495253086090088,2.4787185192108154
+create,service,752530af-28c0-49fc-b448-7d07219a0950,8905,2,5,3,,,1685550833.6560252,1685550836.0597742,1685550836.047628,2.4037489891052246,2.3916027545928955
+get,service,08a939f5-96c5-4cf5-9600-8dda7db9540b,10228,2,5,3,,,1685550836.059841,1685550836.2048483,,0.14500737190246582,
+create,link,765a5057-1406-4923-947d-1a7239f41c1b,741,2,,,,,1685550836.2058809,1685550838.4487805,1685550838.4445448,2.2428996562957764,2.238663911819458
+update,slice,5b2a4a62-41e2-4b9a-a314-4b1198dead8e,10467,2,5,3,2,2,1685550838.4577987,1685550840.902662,1685550840.8947656,2.4448633193969727,2.436966896057129
+create,device,e5e07f20-e201-42c1-a0f3-664fa4b37c3c,32267,41,14,,,,1685550840.9295158,1685550843.6722562,1685550843.6126883,2.7427403926849365,2.6831724643707275
+delete,service,a371c75e-20ba-4ef6-8b8a-3f3e6f7113bc,9636,2,5,3,,,1685550843.6730845,1685550846.0370977,1685550846.0368445,2.364013195037842,2.363759994506836
+delete,link,1d420a47-6210-41b6-a6d3-b5308c854b0a,741,2,,,,,1685550846.037405,1685550848.29021,1685550848.2855854,2.25280499458313,2.248180389404297
+get,link,43898698-7edd-4a04-ab88-45af1295ed15,741,2,,,,,1685550851.0943809,1685550851.1697052,,0.07532429695129395,
+update,link,765a5057-1406-4923-947d-1a7239f41c1b,741,2,,,,,1685550851.1706867,1685550853.4233108,1685550853.418178,2.252624034881592,2.2474913597106934
+delete,device,661dcc5e-0a40-4afb-9919-040603a8e6df,70428,12,61,,,,1685550853.4251065,1685550856.0135345,1685550856.0011592,2.588428020477295,2.576052665710449
+get,slice,4a316935-9f81-40e2-8878-37199401e6dd,10154,2,5,3,1,0,1685550858.5241423,1685550858.6536613,,0.12951898574829102,
+get,slice,4a316935-9f81-40e2-8878-37199401e6dd,10154,2,5,3,1,0,1685550930.1859934,1685550930.314451,,0.12845754623413086,
+get,slice,4a316935-9f81-40e2-8878-37199401e6dd,10154,2,5,3,1,0,1685550983.9055827,1685550984.0380714,,0.13248872756958008,
+get,slice,4a316935-9f81-40e2-8878-37199401e6dd,10978,2,5,3,2,2,1685551141.5355718,1685551141.6670382,,0.13146638870239258,
+update,service,08a939f5-96c5-4cf5-9600-8dda7db9540b,10391,2,5,3,,,1685550858.662921,1685550861.1192496,1685550861.102622,2.4563286304473877,2.4397010803222656
+update,service,08a939f5-96c5-4cf5-9600-8dda7db9540b,8674,2,5,3,,,1685550916.7887435,1685550919.1680152,1685550919.159095,2.3792717456817627,2.370351552963257
+delete,slice,9b0563cd-1737-4239-b53c-d6056bcb784a,9723,2,5,3,1,0,1685550861.2583623,1685550863.6305175,1685550863.6206071,2.37215518951416,2.3622448444366455
+create,slice,62afe33a-9786-43b2-9b9a-80c4cc00a711,11399,2,5,3,2,1,1685550863.6371644,1685550866.0942852,1685550866.085376,2.457120895385742,2.448211669921875
+create,service,67113fa5-aaa7-49ae-bc4f-12876c7ed46f,9456,2,5,3,,,1685550866.1014156,1685550868.537155,1685550868.5365756,2.435739278793335,2.435159921646118
+create,link,d84ff26e-fdbc-44db-bc2a-7e2367eb96b5,741,2,,,,,1685550868.5395334,1685550870.8022242,1685550870.8029025,2.262690782546997,2.263369083404541
+get,device,ae8f46d0-fb10-4b2f-a2c0-52532842b959,99114,47,72,,,,1685550870.8023138,1685550871.1645849,,0.3622710704803467,
+get,device,ae8f46d0-fb10-4b2f-a2c0-52532842b959,114084,25,96,,,,1685550986.2833164,1685550986.6240644,,0.3407480716705322,
+get,device,ae8f46d0-fb10-4b2f-a2c0-52532842b959,64059,3,54,,,,1685551397.85704,1685551398.1359715,,0.2789316177368164,
+delete,link,dfedf91f-272e-4381-8d43-406b1740cc43,741,2,,,,,1685550871.166486,1685550873.4563992,1685550873.4558418,2.2899131774902344,2.289355754852295
+delete,slice,1b236860-168e-43cb-8d8f-496ef0fbd406,9511,2,5,3,2,2,1685550873.4572568,1685550875.881459,1685550875.8853364,2.4242022037506104,2.428079605102539
+create,service,9d4c6848-4b70-48a5-a6d8-78c09acd1770,7316,2,5,3,,,1685550875.8849795,1685550878.3204722,1685550878.3123546,2.435492753982544,2.427375078201294
+delete,device,3c8527a8-5acb-4e19-8676-4dbbd660bfec,25242,24,13,,,,1685550878.3233395,1685550880.7466938,1685550880.7463064,2.423354387283325,2.422966957092285
+update,slice,3a0a64c6-88ef-4d25-ac3b-b57daf8b18ad,9795,2,5,3,1,0,1685550880.8891506,1685550883.38487,1685550883.3356519,2.4957194328308105,2.4465012550354004
+update,slice,3a0a64c6-88ef-4d25-ac3b-b57daf8b18ad,9218,2,5,3,0,1,1685551426.1523223,1685551428.5482206,1685551428.5436733,2.3958983421325684,2.3913509845733643
+create,device,329e4372-2a63-40b9-8648-33a673ab8362,59081,5,51,,,,1685550883.7615433,1685550886.7688468,1685550886.7501454,3.007303476333618,2.9886021614074707
+create,link,34c2418f-1f3b-4baf-b418-7572992d4e00,741,2,,,,,1685550890.048014,1685550892.3041894,1685550892.3038583,2.2561755180358887,2.2558443546295166
+create,slice,b896872d-ef15-4dbb-8543-b62da06a338c,10305,2,5,3,1,2,1685550897.2158115,1685550899.650607,1685550899.6502807,2.434795618057251,2.434469223022461
+delete,service,e7f4fc97-2269-4126-ac29-7f1deaef6ba3,8386,2,5,3,,,1685550899.6511865,1685550901.9617484,1685550901.9614358,2.3105618953704834,2.3102493286132812
+get,link,222ed7f2-09a2-4e77-bf8c-695277d91ebc,741,2,,,,,1685550901.9618664,1685550902.032985,,0.07111859321594238,
+delete,device,f15d57b7-63fd-4b59-bd16-a110bc44f717,95148,31,83,,,,1685550906.7354915,1685550909.5485709,1685550909.4850724,2.813079357147217,2.7495808601379395
+create,service,95f692eb-224d-4449-8645-8db2cf3764dc,8949,2,5,3,,,1685550909.556468,1685550911.95098,1685550911.9507375,2.3945119380950928,2.3942694664001465
+delete,service,95f692eb-224d-4449-8645-8db2cf3764dc,8949,2,5,3,,,1685550911.9513798,1685550914.3072245,1685550914.3065298,2.355844736099243,2.355149984359741
+delete,link,fff48345-6c85-40ed-b046-259c88a4fb63,741,2,,,,,1685550914.4975133,1685550916.7840223,1685550916.77948,2.2865090370178223,2.2819666862487793
+create,device,1eac13ad-7dd5-4521-82cc-e545763ff9bf,62407,13,52,,,,1685550919.2036211,1685550922.043289,1685550922.0339668,2.839667797088623,2.830345630645752
+update,device,ae8f46d0-fb10-4b2f-a2c0-52532842b959,114084,25,96,,,,1685550922.2667,1685550925.561996,1685550925.5545716,3.2952959537506104,3.2878715991973877
+update,device,ae8f46d0-fb10-4b2f-a2c0-52532842b959,64059,3,54,,,,1685551190.388989,1685551193.2515507,1685551193.247967,2.8625617027282715,2.858978033065796
+delete,slice,62afe33a-9786-43b2-9b9a-80c4cc00a711,11399,2,5,3,2,1,1685550925.565504,1685550927.951958,1685550927.9486449,2.386453866958618,2.383140802383423
+create,link,c1c6862c-53a9-4c2e-b7ed-48c924dbbe75,741,2,,,,,1685550927.9524243,1685550930.1859086,1685550930.1852074,2.2334842681884766,2.232783079147339
+create,slice,e13fa9b6-2d18-411e-9c14-c61cb0a1ace5,8894,2,5,3,2,2,1685550930.3201406,1685550932.752148,1685550932.7175474,2.432007312774658,2.397406816482544
+delete,service,1fe7c3a8-93de-4481-9602-c0f5261ee936,9672,2,5,3,,,1685550932.75259,1685550935.117807,1685550935.1141288,2.3652169704437256,2.361538887023926
+create,slice,1cf5478b-ec90-499a-95a2-9fad913699ed,12087,2,5,3,2,2,1685550935.128136,1685550937.6078725,1685550937.5868304,2.479736566543579,2.4586944580078125
+delete,link,31947184-fd3c-4271-87db-e3de76037fa3,741,2,,,,,1685550937.6081529,1685550939.8965764,1685550939.8899484,2.288423538208008,2.2817955017089844
+create,device,a56a75be-fe66-4688-9fc7-91b60a51ef2a,67573,13,59,,,,1685550939.9389322,1685550942.848033,1685550942.8206403,2.9091007709503174,2.8817081451416016
+update,service,f43c97f4-757e-4f9d-be38-f3a22963a4ba,10557,2,5,3,,,1685550942.858198,1685550945.2991202,1685550945.286917,2.440922260284424,2.4287190437316895
+delete,device,96369cd2-50cd-41d3-8979-84b89599fc9a,63786,39,44,,,,1685550945.3017452,1685550947.9122968,1685550947.847642,2.610551595687866,2.5458967685699463
+create,service,eb94453c-25bf-42ad-844c-f1efe9d0a328,9721,2,5,3,,,1685550947.9198942,1685550950.3622093,1685550950.3527198,2.442315101623535,2.4328255653381348
+create,link,8f75d465-e88a-43dd-b4ee-47acb3f4a513,741,2,,,,,1685550950.362541,1685550952.608815,1685550952.60839,2.246273994445801,2.245849132537842
+get,device,0284f7fc-e39c-4a2d-b9b2-709bc0e64055,13819,24,4,,,,1685550952.7470975,1685550952.8277106,,0.0806131362915039,
+get,device,0284f7fc-e39c-4a2d-b9b2-709bc0e64055,13819,24,4,,,,1685551021.303758,1685551021.4972355,,0.19347763061523438,
+delete,slice,29b61621-7a69-4d6d-840a-d46afcc736c8,9034,2,5,3,1,2,1685550957.7528694,1685550960.2024493,1685550960.197195,2.449579954147339,2.4443256855010986
+update,slice,b896872d-ef15-4dbb-8543-b62da06a338c,10184,2,5,3,1,2,1685550960.2117598,1685550962.662529,1685550962.6563783,2.4507691860198975,2.4446184635162354
+update,slice,b896872d-ef15-4dbb-8543-b62da06a338c,10854,2,5,3,1,1,1685551304.8268924,1685551307.2846456,1685551307.2748528,2.4577531814575195,2.447960376739502
+get,slice,b19ee639-29c1-465c-a1be-6dccb456ee68,12393,2,5,3,2,0,1685550962.662619,1685550962.7953198,,0.13270068168640137,
+get,slice,b19ee639-29c1-465c-a1be-6dccb456ee68,12393,2,5,3,2,0,1685551060.8527625,1685551061.0253074,,0.1725449562072754,
+get,link,ba7d09a5-3a46-4dc7-9f86-7f6959167783,741,2,,,,,1685550962.7956438,1685550962.8657362,,0.07009243965148926,
+delete,device,4bfdce86-e067-4213-9889-5a0c167b0033,30776,39,12,,,,1685550965.85259,1685550968.3592396,1685550968.3500967,2.5066494941711426,2.497506618499756
+create,device,fd95a500-09e9-4a5f-b2ab-e79c3f81cffb,106217,11,92,,,,1685550970.8734303,1685550974.0672264,1685550973.9261298,3.193796157836914,3.052699565887451
+update,slice,256915b4-c08b-4db0-a87f-692a25b85c96,10346,2,5,3,0,2,1685550974.0734525,1685550976.5142417,1685550976.5078518,2.440789222717285,2.434399366378784
+delete,slice,50ac303c-ff60-4178-9fe8-0f14f490e8fb,10810,2,5,3,1,1,1685550976.6462672,1685550979.0186455,1685550979.0128462,2.372378349304199,2.366579055786133
+create,service,62890510-9312-4e39-96df-77f1427baf2d,10265,2,5,3,,,1685550979.0233107,1685550981.470845,1685550981.4615896,2.4475343227386475,2.438278913497925
+delete,service,f43c97f4-757e-4f9d-be38-f3a22963a4ba,10557,2,5,3,,,1685550981.540304,1685550983.90455,1685550983.9054427,2.364246129989624,2.3651387691497803
+create,link,f3030e24-e690-4576-a998-e8cfdaa80ce2,741,2,,,,,1685550984.0387266,1685550986.2832503,1685550986.2834797,2.244523763656616,2.244753122329712
+update,link,aa9a1963-99a7-4ac4-a548-8c45a89f302c,741,2,,,,,1685550986.625225,1685550988.8642964,1685550988.8569198,2.2390713691711426,2.2316946983337402
+create,slice,ebc7e640-262c-4ff8-8d45-ce9c8186c03b,9828,2,5,3,2,1,1685550988.8743546,1685550991.3320835,1685550991.3222592,2.457728862762451,2.447904586791992
+delete,link,85bc0dde-646f-44b7-bd87-84e6a930d49b,741,2,,,,,1685550991.333661,1685550993.5832486,1685550993.5826514,2.2495875358581543,2.248990297317505
+create,link,ab0a2537-843e-4791-bb67-4cfae09223dc,741,2,,,,,1685550993.5839627,1685550995.8374188,1685550995.8327074,2.2534561157226562,2.2487447261810303
+update,service,4cf798e2-733b-4a43-8d9a-4d2236c2edbf,9194,2,5,3,,,1685551001.3514009,1685551003.7315335,1685551003.7224734,2.3801326751708984,2.37107253074646
+update,service,4cf798e2-733b-4a43-8d9a-4d2236c2edbf,9122,2,5,3,,,1685551096.3234808,1685551098.7218301,1685551098.7161493,2.3983492851257324,2.3926684856414795
+update,service,4cf798e2-733b-4a43-8d9a-4d2236c2edbf,9508,2,5,3,,,1685551149.1677687,1685551151.609072,1685551151.6052842,2.441303253173828,2.4375154972076416
+create,slice,e42f303b-aeb8-4bbf-8c50-0bb86f9053c1,9546,2,5,3,1,0,1685551003.738771,1685551006.1783211,1685551006.178071,2.4395501613616943,2.439300060272217
+get,link,34c2418f-1f3b-4baf-b418-7572992d4e00,741,2,,,,,1685551006.30991,1685551006.3784945,,0.06858444213867188,
+get,link,34c2418f-1f3b-4baf-b418-7572992d4e00,741,2,,,,,1685551461.6777935,1685551461.7487319,,0.0709383487701416,
+create,service,aec0c495-d56f-4212-8801-e192a345fdae,9117,2,5,3,,,1685551006.385923,1685551008.7821834,1685551008.7733493,2.3962604999542236,2.3874263763427734
+delete,slice,5b2a4a62-41e2-4b9a-a314-4b1198dead8e,10467,2,5,3,2,2,1685551008.7828288,1685551011.1575563,1685551011.1520987,2.374727487564087,2.369269847869873
+get,service,fcc06dc3-937d-498a-a486-2a4418ef58eb,7961,2,5,3,,,1685551011.1598551,1685551011.293484,,0.13362884521484375,
+delete,service,e8fa19fc-b095-4669-a5b4-f2bbb734986e,9770,2,5,3,,,1685551013.5245783,1685551015.8927705,1685551015.8892787,2.368192195892334,2.3647003173828125
+delete,link,ca9a630c-8fad-4ad5-9738-65b9a713e836,741,2,,,,,1685551015.89307,1685551018.12986,1685551018.1293013,2.2367899417877197,2.2362313270568848
+create,device,b38995b6-19c0-41ad-9a1c-911ecbb444d4,102470,43,79,,,,1685551018.1799223,1685551021.302297,1685551021.290002,3.1223747730255127,3.110079765319824
+delete,device,99c37cd3-fe36-477a-ae37-50a84b7152d7,24497,38,9,,,,1685551021.4998996,1685551023.8911805,1685551023.8884883,2.3912808895111084,2.3885886669158936
+create,service,121fde2b-12b1-492d-bed7-8551ff80fc5a,7374,2,5,3,,,1685551023.8964148,1685551026.3442597,1685551026.3275943,2.447844982147217,2.4311795234680176
+get,device,e5e07f20-e201-42c1-a0f3-664fa4b37c3c,32267,41,14,,,,1685551028.5951562,1685551028.799315,,0.20415878295898438,
+get,device,e5e07f20-e201-42c1-a0f3-664fa4b37c3c,24989,14,18,,,,1685551428.683118,1685551428.8245769,,0.14145874977111816,
+get,slice,659ad2b9-ca89-4f3b-80cb-b2fa70eb32ad,12602,2,5,3,2,1,1685551028.8039951,1685551028.8862698,,0.0822746753692627,
+get,slice,659ad2b9-ca89-4f3b-80cb-b2fa70eb32ad,12602,2,5,3,2,1,1685551111.3892446,1685551111.5272472,,0.13800263404846191,
+get,slice,659ad2b9-ca89-4f3b-80cb-b2fa70eb32ad,12602,2,5,3,2,1,1685551416.1608799,1685551416.3036513,,0.14277148246765137,
+delete,link,f3030e24-e690-4576-a998-e8cfdaa80ce2,741,2,,,,,1685551028.8866866,1685551031.1678493,1685551031.1651049,2.281162738800049,2.2784183025360107
+delete,service,eb94453c-25bf-42ad-844c-f1efe9d0a328,9721,2,5,3,,,1685551031.1686692,1685551033.5381463,1685551033.537972,2.3694770336151123,2.369302749633789
+delete,device,b38995b6-19c0-41ad-9a1c-911ecbb444d4,102470,43,79,,,,1685551033.541072,1685551036.2581127,1685551036.2364743,2.717040777206421,2.6954023838043213
+delete,slice,e13fa9b6-2d18-411e-9c14-c61cb0a1ace5,8894,2,5,3,2,2,1685551036.2586908,1685551038.6314108,1685551038.6242833,2.3727200031280518,2.3655924797058105
+create,slice,97c0691f-9e69-4798-8fb2-65f6802f1d1d,10534,2,5,3,1,2,1685551038.6381063,1685551041.0671263,1685551041.068146,2.4290199279785156,2.430039644241333
+create,link,1d1776dc-20d8-4a6e-a768-edba25c7f31d,741,2,,,,,1685551041.0677094,1685551043.314553,1685551043.3101616,2.2468435764312744,2.2424521446228027
+get,service,5e9d65a0-e8b9-4162-b33e-7ad92278ef09,8910,2,5,3,,,1685551045.8351371,1685551045.971631,,0.13649392127990723,
+update,service,1f9516ef-3cd2-491b-b8b8-e89745848e31,8226,2,5,3,,,1685551045.9787302,1685551048.3754191,1685551048.3564274,2.396688938140869,2.377697229385376
+update,service,1f9516ef-3cd2-491b-b8b8-e89745848e31,9490,2,5,3,,,1685551320.127594,1685551322.5832272,1685551322.5704136,2.4556331634521484,2.442819595336914
+create,device,29307113-40ef-4c18-9868-4efc15177df9,21494,24,11,,,,1685551048.4586852,1685551051.0082095,1685551050.992612,2.5495243072509766,2.5339267253875732
+update,device,0284f7fc-e39c-4a2d-b9b2-709bc0e64055,29417,19,19,,,,1685551051.0370154,1685551053.688657,1685551053.6770601,2.651641607284546,2.640044689178467
+update,device,0284f7fc-e39c-4a2d-b9b2-709bc0e64055,56537,46,32,,,,1685551141.7007034,1685551144.6188674,1685551144.5658343,2.918164014816284,2.86513090133667
+update,device,0284f7fc-e39c-4a2d-b9b2-709bc0e64055,77204,21,61,,,,1685551279.302443,1685551282.234411,1685551282.2067614,2.9319679737091064,2.904318332672119
+create,service,d4181362-0dc9-4ca8-b41a-06f9db25b4c9,7102,2,5,3,,,1685551053.6947224,1685551056.074875,1685551056.0680432,2.380152702331543,2.3733208179473877
+delete,service,d4181362-0dc9-4ca8-b41a-06f9db25b4c9,7102,2,5,3,,,1685551056.0752864,1685551058.3847814,1685551058.3828704,2.309494972229004,2.307584047317505
+delete,link,765a5057-1406-4923-947d-1a7239f41c1b,741,2,,,,,1685551058.455322,1685551060.7188358,1685551060.7176023,2.2635138034820557,2.262280225753784
+get,service,9d4c6848-4b70-48a5-a6d8-78c09acd1770,7316,2,5,3,,,1685551060.7189264,1685551060.8525856,,0.13365912437438965,
+get,service,9d4c6848-4b70-48a5-a6d8-78c09acd1770,7316,2,5,3,,,1685551175.5684237,1685551175.707238,,0.13881421089172363,
+get,service,9d4c6848-4b70-48a5-a6d8-78c09acd1770,7316,2,5,3,,,1685551215.9057274,1685551216.039598,,0.13387060165405273,
+create,device,4c1bee88-fe05-4485-8e2a-e60f7889e7d7,113699,15,92,,,,1685551061.0801363,1685551064.2963126,1685551064.2389219,3.2161762714385986,3.158785581588745
+delete,slice,1cf5478b-ec90-499a-95a2-9fad913699ed,12087,2,5,3,2,2,1685551064.2982018,1685551066.698657,1685551066.693293,2.4004552364349365,2.3950912952423096
+create,slice,ed2d612d-ad79-4799-aab7-834fee76f306,7799,2,5,3,1,0,1685551066.7029934,1685551069.1012933,1685551069.0907578,2.3982999324798584,2.3877644538879395
+create,link,ab43712d-900f-488c-ac48-880395bf52dc,741,2,,,,,1685551069.1019754,1685551071.3483343,1685551071.3473647,2.246358871459961,2.245389223098755
+update,link,610fb821-120d-4846-a650-194e83c8222a,741,2,,,,,1685551073.7465882,1685551075.9869976,1685551075.9862165,2.2404093742370605,2.239628314971924
+get,device,b8a29228-6901-4de5-86d6-4b654ec360d7,87352,10,83,,,,1685551075.9888792,1685551076.3187118,,0.3298325538635254,
+get,device,b8a29228-6901-4de5-86d6-4b654ec360d7,87352,10,83,,,,1685551685.3283052,1685551685.6653576,,0.3370523452758789,
+update,device,1eac13ad-7dd5-4521-82cc-e545763ff9bf,6330,8,3,,,,1685551076.3222632,1685551078.7130702,1685551078.7121944,2.3908069133758545,2.3899312019348145
+delete,device,c596e0aa-a810-4b87-9228-565ffef37fd1,51041,24,42,,,,1685551078.7181509,1685551081.2907887,1685551081.2791078,2.5726377964019775,2.5609569549560547
+update,slice,e42f303b-aeb8-4bbf-8c50-0bb86f9053c1,12241,2,5,3,2,0,1685551081.2985935,1685551083.7617385,1685551083.7515178,2.4631450176239014,2.4529242515563965
+delete,service,fcc06dc3-937d-498a-a486-2a4418ef58eb,7961,2,5,3,,,1685551083.7622745,1685551086.062819,1685551086.0593507,2.300544500350952,2.2970762252807617
+create,slice,bb5a8ae3-8749-4939-97b8-5f680f05fb46,9655,2,5,3,2,0,1685551086.0710185,1685551088.581565,1685551088.536543,2.5105464458465576,2.465524435043335
+update,slice,4a316935-9f81-40e2-8878-37199401e6dd,10978,2,5,3,2,2,1685551088.5882127,1685551091.0378366,1685551091.047471,2.4496238231658936,2.4592583179473877
+create,device,c9df9a12-949c-4fd0-bb96-718a179dbb7b,77722,10,69,,,,1685551091.095762,1685551094.0755339,1685551094.0409744,2.979771852493286,2.9452123641967773
+update,link,43898698-7edd-4a04-ab88-45af1295ed15,741,2,,,,,1685551094.075942,1685551096.318223,1685551096.3134317,2.242280960083008,2.237489700317383
+update,link,43898698-7edd-4a04-ab88-45af1295ed15,741,2,,,,,1685551390.5811176,1685551392.8361735,1685551392.825276,2.2550559043884277,2.2441582679748535
+update,link,43898698-7edd-4a04-ab88-45af1295ed15,741,2,,,,,1685551487.0917053,1685551489.3387525,1685551489.3385303,2.247047185897827,2.2468249797821045
+update,link,43898698-7edd-4a04-ab88-45af1295ed15,741,2,,,,,1685551606.7098973,1685551608.991131,1685551608.944087,2.281233787536621,2.234189748764038
+get,service,121fde2b-12b1-492d-bed7-8551ff80fc5a,7374,2,5,3,,,1685551098.7238996,1685551098.851284,,0.12738442420959473,
+get,service,121fde2b-12b1-492d-bed7-8551ff80fc5a,7374,2,5,3,,,1685551168.0339608,1685551168.169178,,0.13521718978881836,
+create,link,edf1bb76-a88d-4d01-8fd2-4fbfe5b7d4b1,741,2,,,,,1685551098.851918,1685551101.0909758,1685551101.0882342,2.239057779312134,2.236316204071045
+create,service,9f96269c-7083-410f-bc64-0cacfc81c168,10158,2,5,3,,,1685551101.0983913,1685551103.5484116,1685551103.536364,2.4500203132629395,2.4379727840423584
+update,device,e5e07f20-e201-42c1-a0f3-664fa4b37c3c,101555,33,83,,,,1685551103.599949,1685551106.6888504,1685551106.6594923,3.0889015197753906,3.0595433712005615
+update,device,e5e07f20-e201-42c1-a0f3-664fa4b37c3c,24989,14,18,,,,1685551324.967153,1685551327.5649948,1685551327.5497906,2.597841739654541,2.5826375484466553
+update,device,e5e07f20-e201-42c1-a0f3-664fa4b37c3c,35775,41,17,,,,1685551576.1691024,1685551578.916384,1685551578.850844,2.747281551361084,2.68174147605896
+update,device,e5e07f20-e201-42c1-a0f3-664fa4b37c3c,53508,8,48,,,,1685551771.8049657,1685551774.8310966,1685551774.7745793,3.0261309146881104,2.969613552093506
+delete,link,d271bc58-52fb-425d-8802-2f97d0dd0354,741,2,,,,,1685551106.6893628,1685551108.9582365,1685551108.952597,2.268873691558838,2.2632341384887695
+get,link,e3fa60ea-e185-4563-ad59-0a42b4858aaf,741,2,,,,,1685551108.9591107,1685551109.0346596,,0.07554888725280762,
+delete,slice,ebc7e640-262c-4ff8-8d45-ce9c8186c03b,9828,2,5,3,2,1,1685551109.0350494,1685551111.3891165,1685551111.388523,2.354067087173462,2.353473663330078
+delete,device,1eac13ad-7dd5-4521-82cc-e545763ff9bf,6330,8,3,,,,1685551111.5288866,1685551113.8660412,1685551113.865654,2.3371546268463135,2.3367674350738525
+delete,device,6714973a-47d2-42ea-b3ae-d534417ef4a1,71122,31,52,,,,1685551114.150065,1685551116.801233,1685551116.7788608,2.65116810798645,2.628795862197876
+delete,link,e3fa60ea-e185-4563-ad59-0a42b4858aaf,741,2,,,,,1685551116.8016555,1685551119.0347202,1685551119.031394,2.233064651489258,2.229738473892212
+create,device,33089993-aeef-4d8c-ad60-5189a221e9f8,87416,17,75,,,,1685551119.074919,1685551122.0522056,1685551122.0247648,2.9772865772247314,2.949845790863037
+delete,slice,97c0691f-9e69-4798-8fb2-65f6802f1d1d,10534,2,5,3,1,2,1685551122.052588,1685551124.4228058,1685551124.4226174,2.370217800140381,2.3700294494628906
+create,link,474fe471-5d27-4b7b-9cb1-e8295ed7ec95,741,2,,,,,1685551124.6793075,1685551126.9135673,1685551126.913234,2.234259843826294,2.23392653465271
+update,link,474fe471-5d27-4b7b-9cb1-e8295ed7ec95,741,2,,,,,1685551127.0482147,1685551129.2998757,1685551129.2938302,2.2516610622406006,2.2456154823303223
+update,link,474fe471-5d27-4b7b-9cb1-e8295ed7ec95,741,2,,,,,1685551343.1246603,1685551345.3745406,1685551345.3742745,2.249880313873291,2.2496142387390137
+update,link,474fe471-5d27-4b7b-9cb1-e8295ed7ec95,741,2,,,,,1685551726.857911,1685551729.102966,1685551729.1035395,2.2450549602508545,2.2456283569335938
+create,service,041f8439-8b83-4ec1-a095-05c3fde21822,11513,2,5,3,,,1685551129.310697,1685551131.757018,1685551131.746283,2.4463210105895996,2.4355859756469727
+get,link,474fe471-5d27-4b7b-9cb1-e8295ed7ec95,741,2,,,,,1685551131.7571328,1685551131.8260236,,0.06889081001281738,
+delete,service,b20eeba9-3a19-4130-b0a7-13f1520790c6,10456,2,5,3,,,1685551134.342288,1685551136.6928432,1685551136.692328,2.350555181503296,2.3500399589538574
+create,slice,1f43294e-5952-4538-9073-9c9b1fcb1390,12182,2,5,3,2,0,1685551136.707601,1685551139.156556,1685551139.1492457,2.4489548206329346,2.4416446685791016
+update,link,ab43712d-900f-488c-ac48-880395bf52dc,741,2,,,,,1685551144.6201327,1685551146.864299,1685551146.8593445,2.244166374206543,2.2392117977142334
+delete,link,ab0a2537-843e-4791-bb67-4cfae09223dc,741,2,,,,,1685551146.8644767,1685551149.1518836,1685551149.1487336,2.2874069213867188,2.284256935119629
+create,link,afb6d250-a98a-4088-bcd5-63bea1e13123,741,2,,,,,1685551151.6820338,1685551153.9756095,1685551153.9255483,2.2935757637023926,2.2435145378112793
+get,device,a56a75be-fe66-4688-9fc7-91b60a51ef2a,67573,13,59,,,,1685551153.975702,1685551154.2987778,,0.3230757713317871,
+create,device,376c39c4-9d47-40a8-b998-79c9c82ea21e,55992,7,49,,,,1685551154.3253698,1685551157.2650995,1685551157.216328,2.939729690551758,2.890958070755005
+create,slice,ef71a6d9-f2b1-48d1-885a-1502b7b10add,10357,2,5,3,1,1,1685551157.2704248,1685551159.7234683,1685551159.7073457,2.4530434608459473,2.4369208812713623
+delete,service,aec0c495-d56f-4212-8801-e192a345fdae,9117,2,5,3,,,1685551159.7240422,1685551162.0885694,1685551162.086151,2.3645272254943848,2.3621087074279785
+update,device,1d03df33-0ddb-4aff-82e3-622ecd9c8e40,109041,36,85,,,,1685551162.1503305,1685551165.3201864,1685551165.2788942,3.169855833053589,3.128563642501831
+delete,device,af25e5f0-f8b9-4ca8-85bf-4e829b7f425f,110912,14,94,,,,1685551165.3242235,1685551168.0332582,1685551168.0234919,2.7090346813201904,2.699268341064453
+delete,slice,1f43294e-5952-4538-9073-9c9b1fcb1390,12182,2,5,3,2,0,1685551170.6155791,1685551173.0285428,1685551173.028203,2.412963628768921,2.412623882293701
+get,slice,3a0a64c6-88ef-4d25-ac3b-b57daf8b18ad,9795,2,5,3,1,0,1685551173.030902,1685551173.1619985,,0.13109660148620605,
+get,slice,3a0a64c6-88ef-4d25-ac3b-b57daf8b18ad,9795,2,5,3,1,0,1685551352.5497074,1685551352.6810014,,0.13129401206970215,
+create,service,933510c4-fb08-46d3-9600-7a28e228b8d5,8241,2,5,3,,,1685551173.1667125,1685551175.5683215,1685551175.5525565,2.401608943939209,2.3858439922332764
+delete,service,491ad418-1d73-4876-999c-de4920311f14,8225,2,5,3,,,1685551175.7079546,1685551178.014199,1685551178.0138419,2.306244373321533,2.305887222290039
+delete,link,afb6d250-a98a-4088-bcd5-63bea1e13123,741,2,,,,,1685551178.0145624,1685551180.25144,1685551180.246041,2.236877679824829,2.231478691101074
+create,slice,cf38d9ce-7eb4-4074-aa11-a5443d596f72,10439,2,5,3,1,1,1685551180.257205,1685551182.7112312,1685551182.6993806,2.454026222229004,2.4421756267547607
+update,service,681e1b10-7724-40b8-a396-916e7359b7cd,10397,2,5,3,,,1685551182.7246606,1685551185.1710958,1685551185.1658485,2.4464352130889893,2.441187858581543
+delete,slice,bb5a8ae3-8749-4939-97b8-5f680f05fb46,9655,2,5,3,2,0,1685551185.171763,1685551187.5456827,1685551187.5453153,2.373919725418091,2.3735523223876953
+get,device,fd95a500-09e9-4a5f-b2ab-e79c3f81cffb,106217,11,92,,,,1685551187.6799996,1685551187.9345164,,0.2545168399810791,
+get,device,fd95a500-09e9-4a5f-b2ab-e79c3f81cffb,106217,11,92,,,,1685551297.5274222,1685551297.88445,,0.3570277690887451,
+get,device,fd95a500-09e9-4a5f-b2ab-e79c3f81cffb,106217,11,92,,,,1685551726.5310822,1685551726.8569076,,0.32582545280456543,
+update,slice,ef71a6d9-f2b1-48d1-885a-1502b7b10add,9156,2,5,3,0,0,1685551187.9425037,1685551190.348355,1685551190.3418138,2.405851364135742,2.3993101119995117
+delete,device,b522fa4b-ead4-4e0e-998f-5590367daacd,33037,2,31,,,,1685551193.2525976,1685551195.7644157,1685551195.7466073,2.5118181705474854,2.4940097332000732
+create,link,e6823019-59c8-48e7-8bcb-618d78665657,741,2,,,,,1685551195.7650208,1685551198.0152738,1685551198.0139916,2.2502529621124268,2.2489707469940186
+create,service,58f28406-9b65-4299-932e-8ae7e00d3904,9549,2,5,3,,,1685551198.026738,1685551200.4679391,1685551200.4674664,2.4412012100219727,2.4407284259796143
+create,device,4f0b1639-7122-4534-a9ab-699ce8ae7618,35559,38,18,,,,1685551200.484419,1685551203.1215374,1685551203.1117747,2.637118339538574,2.6273555755615234
+get,link,d84ff26e-fdbc-44db-bc2a-7e2367eb96b5,741,2,,,,,1685551205.3660128,1685551205.436529,,0.07051610946655273,
+get,link,d84ff26e-fdbc-44db-bc2a-7e2367eb96b5,741,2,,,,,1685551352.4764786,1685551352.547547,,0.07106852531433105,
+get,link,d84ff26e-fdbc-44db-bc2a-7e2367eb96b5,741,2,,,,,1685551482.4186738,1685551482.4910793,,0.07240557670593262,
+get,link,d84ff26e-fdbc-44db-bc2a-7e2367eb96b5,741,2,,,,,1685551567.9827337,1685551568.0621638,,0.07943010330200195,
+get,link,d84ff26e-fdbc-44db-bc2a-7e2367eb96b5,741,2,,,,,1685551622.1353993,1685551622.214219,,0.07881975173950195,
+get,link,d84ff26e-fdbc-44db-bc2a-7e2367eb96b5,741,2,,,,,1685551708.6989,1685551708.7703378,,0.07143783569335938,
+create,service,9fb249dd-ed50-424f-baaa-44e906102f3e,9371,2,5,3,,,1685551205.4407501,1685551207.8984282,1685551207.883702,2.4576780796051025,2.4429519176483154
+get,link,251c4999-632c-4540-aabb-1f1f1d389f61,741,2,,,,,1685551207.8985238,1685551207.9689634,,0.07043957710266113,
+get,link,251c4999-632c-4540-aabb-1f1f1d389f61,741,2,,,,,1685551398.1363742,1685551398.206528,,0.07015371322631836,
+update,device,4c1bee88-fe05-4485-8e2a-e60f7889e7d7,100791,7,95,,,,1685551210.2784705,1685551213.4280608,1685551213.348967,3.149590253829956,3.0704965591430664
+update,service,67113fa5-aaa7-49ae-bc4f-12876c7ed46f,11410,2,5,3,,,1685551213.439256,1685551215.9055998,1685551215.8961265,2.466343879699707,2.4568705558776855
+update,service,67113fa5-aaa7-49ae-bc4f-12876c7ed46f,11164,2,5,3,,,1685551345.381415,1685551347.8626506,1685551347.842848,2.4812357425689697,2.461433172225952
+delete,slice,eb68b280-9e62-42d8-ba6b-2a5f80ec9762,10675,2,5,3,0,2,1685551216.0405622,1685551218.4098673,1685551218.4010494,2.36930513381958,2.360487222671509
+create,device,02c68b2c-4208-4918-93d8-e5ec14de64b4,73302,18,63,,,,1685551218.450173,1685551221.3762248,1685551221.3207505,2.9260518550872803,2.870577573776245
+delete,link,e6823019-59c8-48e7-8bcb-618d78665657,741,2,,,,,1685551221.3766782,1685551223.6295578,1685551223.626885,2.2528796195983887,2.250206708908081
+delete,device,4f0b1639-7122-4534-a9ab-699ce8ae7618,35559,38,18,,,,1685551223.6315763,1685551226.138714,1685551226.1292768,2.5071377754211426,2.4977004528045654
+update,slice,ed2d612d-ad79-4799-aab7-834fee76f306,10934,2,5,3,1,1,1685551226.1448503,1685551228.5926435,1685551228.584484,2.4477932453155518,2.439633846282959
+create,slice,ade47eb3-a986-491e-bb68-7393ae428868,11289,2,5,3,1,0,1685551228.5985856,1685551231.0482337,1685551231.0459278,2.449648141860962,2.4473421573638916
+create,link,03ca7f44-b8be-4ddf-9177-83ecfa329843,741,2,,,,,1685551231.0500784,1685551233.3036618,1685551233.299119,2.2535834312438965,2.2490406036376953
+delete,service,58f28406-9b65-4299-932e-8ae7e00d3904,9549,2,5,3,,,1685551233.3041143,1685551235.716602,1685551235.716265,2.412487745285034,2.4121506214141846
+get,slice,ed2d612d-ad79-4799-aab7-834fee76f306,10934,2,5,3,1,1,1685551235.7167494,1685551235.8618379,,0.14508843421936035,
+get,slice,ed2d612d-ad79-4799-aab7-834fee76f306,10934,2,5,3,1,1,1685551249.9623713,1685551250.0416787,,0.07930731773376465,
+get,device,4989d9ae-43e0-4110-8b25-11b168b541a3,49773,30,33,,,,1685551235.8621478,1685551236.0823028,,0.2201550006866455,
+update,device,c9df9a12-949c-4fd0-bb96-718a179dbb7b,107977,39,87,,,,1685551238.601285,1685551241.784927,1685551241.6374726,3.1836419105529785,3.0361876487731934
+delete,link,03ca7f44-b8be-4ddf-9177-83ecfa329843,741,2,,,,,1685551241.785569,1685551244.1250288,1685551244.1309018,2.3394598960876465,2.3453328609466553
+create,device,9475a253-069e-4891-869e-b33cd8f1e0ac,88806,3,81,,,,1685551244.1850367,1685551247.155644,1685551247.1181893,2.970607280731201,2.933152675628662
+create,service,b375fe03-fe5a-4f26-8758-a2d5a4fa9c72,10077,2,5,3,,,1685551247.1613724,1685551249.6255748,1685551249.614613,2.464202404022217,2.4532406330108643
+get,device,376c39c4-9d47-40a8-b998-79c9c82ea21e,55992,7,49,,,,1685551249.7607484,1685551249.9618976,,0.20114922523498535,
+update,service,752530af-28c0-49fc-b448-7d07219a0950,10365,2,5,3,,,1685551252.2859185,1685551254.846995,1685551254.768498,2.5610766410827637,2.482579469680786
+update,service,752530af-28c0-49fc-b448-7d07219a0950,8791,2,5,3,,,1685551276.8495903,1685551279.2670283,1685551279.2268806,2.41743803024292,2.3772902488708496
+update,service,752530af-28c0-49fc-b448-7d07219a0950,8805,2,5,3,,,1685551724.1486356,1685551726.5309641,1685551726.525823,2.382328510284424,2.377187490463257
+delete,slice,b19ee639-29c1-465c-a1be-6dccb456ee68,12393,2,5,3,2,0,1685551254.8474452,1685551257.2675445,1685551257.2595348,2.4200992584228516,2.4120895862579346
+create,slice,cc0e831a-b232-48ae-8cce-92ea8fe7795f,9459,2,5,3,2,1,1685551257.2752502,1685551259.7326071,1685551259.7221115,2.4573569297790527,2.4468612670898438
+delete,service,08a939f5-96c5-4cf5-9600-8dda7db9540b,8674,2,5,3,,,1685551259.7331388,1685551262.0980496,1685551262.090705,2.364910840988159,2.3575661182403564
+create,link,dc782406-81bc-48c3-a691-757af32e3fe2,741,2,,,,,1685551262.0986078,1685551264.3458612,1685551264.3417497,2.24725341796875,2.2431418895721436
+get,link,c1c6862c-53a9-4c2e-b7ed-48c924dbbe75,741,2,,,,,1685551264.345956,1685551264.4159586,,0.07000255584716797,
+delete,device,4c1bee88-fe05-4485-8e2a-e60f7889e7d7,100791,7,95,,,,1685551264.4182336,1685551267.1158817,1685551267.0873792,2.697648048400879,2.6691455841064453
+delete,service,121fde2b-12b1-492d-bed7-8551ff80fc5a,7374,2,5,3,,,1685551267.1191592,1685551269.424344,1685551269.4240496,2.305184841156006,2.3048903942108154
+update,link,251c4999-632c-4540-aabb-1f1f1d389f61,741,2,,,,,1685551269.424924,1685551271.6607769,1685551271.6599889,2.2358529567718506,2.23506498336792
+get,slice,e42f303b-aeb8-4bbf-8c50-0bb86f9053c1,12241,2,5,3,2,0,1685551274.1123211,1685551274.2550733,,0.14275217056274414,
+create,link,539ad2ef-e175-4086-99a0-fa0163f268ad,741,2,,,,,1685551274.2571764,1685551276.497076,1685551276.4918675,2.2398996353149414,2.2346911430358887
+get,device,329e4372-2a63-40b9-8648-33a673ab8362,59081,5,51,,,,1685551276.4984086,1685551276.7681234,,0.2697148323059082,
+get,device,329e4372-2a63-40b9-8648-33a673ab8362,59081,5,51,,,,1685551367.486235,1685551367.7631238,,0.2768888473510742,
+get,device,329e4372-2a63-40b9-8648-33a673ab8362,59081,5,51,,,,1685551482.1461987,1685551482.416746,,0.27054715156555176,
+get,service,933510c4-fb08-46d3-9600-7a28e228b8d5,8241,2,5,3,,,1685551276.7685475,1685551276.8460364,,0.07748889923095703,
+create,slice,ad536e1a-4519-4493-a330-8f3a53a15a3b,11438,2,5,3,1,2,1685551282.2418928,1685551284.6982098,1685551284.6855793,2.4563169479370117,2.4436864852905273
+get,link,ab43712d-900f-488c-ac48-880395bf52dc,741,2,,,,,1685551284.6994898,1685551284.7696915,,0.07020163536071777,
+delete,link,ab43712d-900f-488c-ac48-880395bf52dc,741,2,,,,,1685551284.770334,1685551287.006848,1685551287.001667,2.236514091491699,2.231333017349243
+delete,device,33089993-aeef-4d8c-ad60-5189a221e9f8,87416,17,75,,,,1685551287.009883,1685551289.735129,1685551289.7299073,2.7252461910247803,2.720024347305298
+create,service,0f5073d4-0741-45e8-8337-d99ed4d0ecc1,9596,2,5,3,,,1685551289.7417798,1685551292.204548,1685551292.19842,2.462768077850342,2.4566402435302734
+delete,slice,4a316935-9f81-40e2-8878-37199401e6dd,10978,2,5,3,2,2,1685551292.2050424,1685551294.576025,1685551294.56895,2.3709826469421387,2.3639075756073
+create,device,2275c9d6-6168-4b3f-8951-ef62ae0548f3,63552,21,48,,,,1685551294.6120334,1685551297.5272439,1685551297.4985523,2.915210485458374,2.886518955230713
+delete,link,222ed7f2-09a2-4e77-bf8c-695277d91ebc,741,2,,,,,1685551297.8856313,1685551300.1310863,1685551300.1249862,2.245455026626587,2.2393548488616943
+create,link,1c444dcf-db18-433f-944d-f73dc1978115,741,2,,,,,1685551300.1316469,1685551302.3709228,1685551302.3630373,2.2392759323120117,2.2313904762268066
+create,service,d7fa2455-534b-472e-95c5-89ceed522ece,9703,2,5,3,,,1685551302.3772166,1685551304.8190904,1685551304.8122375,2.441873788833618,2.435020923614502
+delete,device,a56a75be-fe66-4688-9fc7-91b60a51ef2a,67573,13,59,,,,1685551309.542323,1685551312.185087,1685551312.1341443,2.64276385307312,2.5918211936950684
+create,slice,cd1ec95b-61af-469f-91a4-fdf9caa984f3,9615,2,5,3,1,0,1685551312.1917393,1685551314.623874,1685551314.6236322,2.4321346282958984,2.4318928718566895
+delete,service,9f96269c-7083-410f-bc64-0cacfc81c168,10158,2,5,3,,,1685551314.6244392,1685551317.0001547,1685551316.9948077,2.375715494155884,2.370368480682373
+get,service,62890510-9312-4e39-96df-77f1427baf2d,10265,2,5,3,,,1685551317.0015557,1685551317.133899,,0.13234329223632812,
+get,link,539ad2ef-e175-4086-99a0-fa0163f268ad,741,2,,,,,1685551317.1341205,1685551317.2078276,,0.07370710372924805,
+create,device,6ed0e486-66ee-4f28-862a-9b2079ec9cc1,60607,24,48,,,,1685551317.238815,1685551320.1203494,1685551320.10922,2.8815343379974365,2.8704049587249756
+delete,slice,e51e01ed-26a9-4b12-bbf4-630883d84858,10739,2,5,3,0,0,1685551322.5837955,1685551324.9533503,1685551324.9506843,2.3695547580718994,2.3668887615203857
+delete,device,9475a253-069e-4891-869e-b33cd8f1e0ac,88806,3,81,,,,1685551327.7166095,1685551330.5208552,1685551330.4713328,2.804245710372925,2.754723310470581
+delete,slice,b0370781-5334-48f8-bdcc-780f8e6c6dba,10993,2,5,3,2,2,1685551330.5218103,1685551332.9049048,1685551332.904622,2.383094549179077,2.3828117847442627
+update,slice,ade47eb3-a986-491e-bb68-7393ae428868,9416,2,5,3,2,2,1685551333.2288036,1685551335.6785803,1685551335.6734025,2.4497766494750977,2.444598913192749
+create,service,aad044fa-78f1-4da4-a8e2-8567650ff589,9536,2,5,3,,,1685551335.6835399,1685551338.1324997,1685551338.133136,2.4489598274230957,2.4495961666107178
+create,slice,2e7867d1-69a7-4ccf-95a9-1a28c6e065c3,9222,2,5,3,0,2,1685551338.2693503,1685551340.6549122,1685551340.646899,2.385561943054199,2.3775486946105957
+create,device,5aeb555e-a8c5-4b2f-9a8b-bb68c3f7f7d8,11818,7,9,,,,1685551340.661342,1685551343.1232452,1685551343.1170259,2.4619033336639404,2.455683946609497
+delete,link,5214f0ae-c140-4494-8208-b7c1e27fb05a,741,2,,,,,1685551347.862848,1685551350.1184647,1685551350.116094,2.2556166648864746,2.2532460689544678
+delete,service,1f9516ef-3cd2-491b-b8b8-e89745848e31,9490,2,5,3,,,1685551350.1188097,1685551352.4764009,1685551352.4761765,2.357591152191162,2.3573668003082275
+create,link,05a46953-3672-4de5-ab94-cdb88627b3aa,741,2,,,,,1685551352.6814842,1685551354.9194255,1685551354.9184012,2.237941265106201,2.236917018890381
+delete,service,4cf798e2-733b-4a43-8d9a-4d2236c2edbf,9508,2,5,3,,,1685551358.0964293,1685551360.4856372,1685551360.4786456,2.3892078399658203,2.382216215133667
+create,link,b67eca1d-03e1-4078-967c-1fffbd270b84,741,2,,,,,1685551360.4862864,1685551362.7347093,1685551362.730962,2.248422861099243,2.244675636291504
+create,service,cb73abe5-84a5-4b3e-a1b7-5e3ace45dc7c,9425,2,5,3,,,1685551365.002494,1685551367.4861193,1685551367.475817,2.4836251735687256,2.473322868347168
+delete,device,1d03df33-0ddb-4aff-82e3-622ecd9c8e40,109041,36,85,,,,1685551367.7661593,1685551370.4756503,1685551370.4563422,2.709491014480591,2.69018292427063
+delete,slice,b896872d-ef15-4dbb-8543-b62da06a338c,10854,2,5,3,1,1,1685551370.476395,1685551372.8439322,1685551372.8387375,2.367537260055542,2.362342596054077
+create,device,7a90dab6-97dc-4399-a013-d1ded9787446,17366,23,7,,,,1685551372.854553,1685551375.3801086,1685551375.3597996,2.5255556106567383,2.505246639251709
+update,slice,cf38d9ce-7eb4-4074-aa11-a5443d596f72,12834,2,5,3,1,1,1685551375.3874826,1685551377.9022198,1685551377.8624434,2.514737129211426,2.4749608039855957
+update,service,0f5073d4-0741-45e8-8337-d99ed4d0ecc1,10369,2,5,3,,,1685551377.909942,1685551380.4035032,1685551380.3976176,2.493561267852783,2.487675666809082
+delete,link,b67eca1d-03e1-4078-967c-1fffbd270b84,741,2,,,,,1685551380.4040244,1685551382.6501513,1685551382.6505866,2.246126890182495,2.2465622425079346
+get,service,041f8439-8b83-4ec1-a095-05c3fde21822,11513,2,5,3,,,1685551385.528076,1685551385.6622224,,0.13414645195007324,
+get,service,041f8439-8b83-4ec1-a095-05c3fde21822,7956,2,5,3,,,1685551718.6226852,1685551718.7512643,,0.12857913970947266,
+create,slice,9b729fad-649c-4e01-b932-5b8206d94a0e,9853,2,5,3,2,0,1685551385.668887,1685551388.1958911,1685551388.1488056,2.5270042419433594,2.4799187183380127
+update,service,9d4c6848-4b70-48a5-a6d8-78c09acd1770,8912,2,5,3,,,1685551388.200959,1685551390.5795894,1685551390.5729656,2.3786303997039795,2.37200665473938
+update,service,9d4c6848-4b70-48a5-a6d8-78c09acd1770,9773,2,5,3,,,1685551604.2542865,1685551606.7095609,1685551606.6982589,2.4552743434906006,2.44397234916687
+delete,service,67113fa5-aaa7-49ae-bc4f-12876c7ed46f,11164,2,5,3,,,1685551392.8365586,1685551395.2000525,1685551395.1988785,2.3634939193725586,2.3623199462890625
+delete,device,02c68b2c-4208-4918-93d8-e5ec14de64b4,73302,18,63,,,,1685551395.2026846,1685551397.8567877,1685551397.8506439,2.6541030406951904,2.6479592323303223
+update,device,376c39c4-9d47-40a8-b998-79c9c82ea21e,94419,38,69,,,,1685551398.2849963,1685551401.346289,1685551401.2677772,3.0612926483154297,2.982780933380127
+delete,link,610fb821-120d-4846-a650-194e83c8222a,741,2,,,,,1685551401.346585,1685551403.610023,1685551403.6096816,2.2634379863739014,2.263096570968628
+get,service,681e1b10-7724-40b8-a396-916e7359b7cd,10397,2,5,3,,,1685551403.610138,1685551403.8087847,,0.19864678382873535,
+delete,slice,872e88d0-6974-4446-92e7-df91712483d2,8372,2,5,3,0,1,1685551403.8098118,1685551406.1561592,1685551406.1559658,2.3463473320007324,2.346153974533081
+create,slice,66b71048-a49f-425b-b03b-82cd89c07e9e,10528,2,5,3,1,0,1685551406.1625793,1685551408.6758769,1685551408.6188529,2.5132975578308105,2.4562735557556152
+create,device,520d566f-dba1-4f5d-977f-93f66bf63dcd,47097,29,31,,,,1685551408.706491,1685551411.5138757,1685551411.4604747,2.807384729385376,2.753983736038208
+create,link,8845bb56-7159-4482-a5ea-4cc28deabca2,741,2,,,,,1685551411.5216057,1685551413.7718976,1685551413.7714977,2.2502918243408203,2.249891996383667
+update,slice,ad536e1a-4519-4493-a330-8f3a53a15a3b,8762,2,5,3,2,0,1685551413.777119,1685551416.1607318,1685551416.1513839,2.383612871170044,2.37426495552063
+create,service,22ba0737-ff9c-4f6a-9817-e45826b18ab4,9339,2,5,3,,,1685551416.3144727,1685551418.7649317,1685551418.7561243,2.4504590034484863,2.4416515827178955
+delete,service,22ba0737-ff9c-4f6a-9817-e45826b18ab4,9339,2,5,3,,,1685551418.767797,1685551421.150421,1685551421.148976,2.3826239109039307,2.381179094314575
+create,slice,b6d976ba-b9e4-4572-9050-33a39ab33373,9184,2,5,3,1,2,1685551421.1553304,1685551423.6168668,1685551423.606809,2.461536407470703,2.4514784812927246
+get,link,1c444dcf-db18-433f-944d-f73dc1978115,741,2,,,,,1685551423.6169405,1685551423.7620525,,0.1451120376586914,
+delete,device,29307113-40ef-4c18-9868-4efc15177df9,21494,24,11,,,,1685551423.7633336,1685551426.1448393,1685551426.142926,2.3815057277679443,2.3795924186706543
+get,service,66c43203-5031-4330-b8d5-f591c91330e8,10707,2,5,3,,,1685551428.551451,1685551428.68272,,0.13126897811889648,
+create,device,665d2a49-404e-4216-9b3a-7047dcdd6fa6,36676,33,21,,,,1685551431.0611787,1685551433.730532,1685551433.7121716,2.6693532466888428,2.6509928703308105
+delete,link,05a46953-3672-4de5-ab94-cdb88627b3aa,741,2,,,,,1685551433.7308397,1685551435.9798548,1685551435.9711676,2.2490150928497314,2.240327835083008
+delete,slice,0e8a1e08-b8e0-43a9-bf5f-3a057e952792,10181,2,5,3,2,0,1685551435.981311,1685551438.343563,1685551438.3432102,2.3622519969940186,2.3618991374969482
+create,link,093496a1-14d3-4fb3-813b-8576d9d8023a,741,2,,,,,1685551438.4792423,1685551440.715077,1685551440.7147005,2.2358345985412598,2.2354581356048584
+create,service,67c4f4bb-4833-482f-a46f-825748cb69d5,10273,2,5,3,,,1685551440.7198515,1685551443.2150211,1685551443.203488,2.4951696395874023,2.4836366176605225
+update,device,520d566f-dba1-4f5d-977f-93f66bf63dcd,93414,29,74,,,,1685551445.7242947,1685551448.7525005,1685551448.6739976,3.0282058715820312,2.9497029781341553
+update,device,520d566f-dba1-4f5d-977f-93f66bf63dcd,38034,3,33,,,,1685551685.7061577,1685551688.4453049,1685551688.3847296,2.739147186279297,2.678571939468384
+delete,service,66c43203-5031-4330-b8d5-f591c91330e8,10707,2,5,3,,,1685551448.7534246,1685551451.1153271,1685551451.1178272,2.3619024753570557,2.3644025325775146
+delete,slice,cd1ec95b-61af-469f-91a4-fdf9caa984f3,9615,2,5,3,1,0,1685551451.1166975,1685551453.4764392,1685551453.4727309,2.359741687774658,2.3560333251953125
+get,slice,b6d976ba-b9e4-4572-9050-33a39ab33373,9184,2,5,3,1,2,1685551455.9330268,1685551456.0872097,,0.15418291091918945,
+get,service,9fb249dd-ed50-424f-baaa-44e906102f3e,9371,2,5,3,,,1685551456.0882487,1685551456.2147367,,0.12648797035217285,
+get,service,9fb249dd-ed50-424f-baaa-44e906102f3e,9371,2,5,3,,,1685551647.5005345,1685551647.6353772,,0.1348426342010498,
+get,service,9fb249dd-ed50-424f-baaa-44e906102f3e,9371,2,5,3,,,1685551756.5626974,1685551756.6952853,,0.13258790969848633,
+create,device,441dc39a-4fb6-4fe7-afdb-b5387ccece11,92387,9,84,,,,1685551456.2650208,1685551459.2976942,1685551459.2760427,3.0326733589172363,3.011021852493286
+create,service,1dc9b5c8-2e91-410c-af1e-4b69f4798b42,7643,2,5,3,,,1685551459.3023474,1685551461.6776984,1685551461.6770647,2.3753509521484375,2.3747172355651855
+create,slice,0b5528f9-4716-44a2-a7f8-8aade21c819a,9640,2,5,3,0,0,1685551461.7551732,1685551464.1901138,1685551464.1862717,2.4349405765533447,2.431098461151123
+delete,link,251c4999-632c-4540-aabb-1f1f1d389f61,741,2,,,,,1685551464.1911597,1685551466.4691703,1685551466.4678392,2.278010606765747,2.276679515838623
+create,link,e9250f5c-3238-441f-b34a-51d741457eda,741,2,,,,,1685551466.814294,1685551469.0652487,1685551469.0551445,2.2509546279907227,2.2408504486083984
+update,service,041f8439-8b83-4ec1-a095-05c3fde21822,7956,2,5,3,,,1685551469.069817,1685551471.4531906,1685551471.4487004,2.383373498916626,2.3788833618164062
+update,link,c1c6862c-53a9-4c2e-b7ed-48c924dbbe75,741,2,,,,,1685551471.453501,1685551473.7077916,1685551473.706688,2.2542905807495117,2.2531869411468506
+update,device,7a90dab6-97dc-4399-a013-d1ded9787446,119192,25,99,,,,1685551473.7676573,1685551477.007575,1685551476.9409497,3.239917755126953,3.173292398452759
+delete,device,bb8ffa57-2e61-4710-8c9a-83fc3008a56c,41188,7,33,,,,1685551477.0100918,1685551479.5514452,1685551479.538106,2.541353464126587,2.5280141830444336
+get,service,0f5073d4-0741-45e8-8337-d99ed4d0ecc1,10369,2,5,3,,,1685551479.5516057,1685551479.6881313,,0.13652563095092773,
+create,service,708b1d3a-57d7-41dd-a50b-86139b08abeb,10476,2,5,3,,,1685551479.6934772,1685551482.1460896,1685551482.1338885,2.4526124000549316,2.440411329269409
+create,link,fcd32754-70fc-4248-ac3a-93021cd7eeb1,741,2,,,,,1685551482.491718,1685551484.7488306,1685551484.7438219,2.257112503051758,2.252103805541992
+delete,service,1dc9b5c8-2e91-410c-af1e-4b69f4798b42,7643,2,5,3,,,1685551484.749331,1685551487.0913365,1685551487.0907423,2.342005491256714,2.3414113521575928
+delete,slice,256915b4-c08b-4db0-a87f-692a25b85c96,10346,2,5,3,0,2,1685551489.3390987,1685551491.7245421,1685551491.7234902,2.3854434490203857,2.3843915462493896
+update,slice,66b71048-a49f-425b-b03b-82cd89c07e9e,8686,2,5,3,0,2,1685551491.7371907,1685551494.125984,1685551494.1215317,2.3887932300567627,2.38434100151062
+create,slice,b1757bb8-9a2d-4269-bbeb-2935606c4685,8733,2,5,3,0,2,1685551494.1316025,1685551496.5297823,1685551496.5182037,2.398179769515991,2.386601209640503
+update,device,441dc39a-4fb6-4fe7-afdb-b5387ccece11,22438,24,12,,,,1685551496.5379684,1685551499.0896502,1685551499.0887856,2.5516817569732666,2.5508172512054443
+update,device,441dc39a-4fb6-4fe7-afdb-b5387ccece11,32678,28,18,,,,1685551609.00614,1685551611.626333,1685551611.6229386,2.6201930046081543,2.6167986392974854
+create,device,18a7bf77-8343-43c8-99c3-3a910d18e5a9,98658,32,82,,,,1685551499.1561973,1685551502.245229,1685551502.184368,3.08903169631958,3.028170585632324
+delete,link,539ad2ef-e175-4086-99a0-fa0163f268ad,741,2,,,,,1685551502.2454743,1685551504.5108864,1685551504.5103981,2.2654120922088623,2.2649238109588623
+get,slice,b1757bb8-9a2d-4269-bbeb-2935606c4685,8733,2,5,3,0,2,1685551507.0314724,1685551507.2030318,,0.17155933380126953,
+delete,device,18a7bf77-8343-43c8-99c3-3a910d18e5a9,98658,32,82,,,,1685551507.2060769,1685551510.118256,1685551510.109215,2.9121792316436768,2.9031381607055664
+delete,service,b375fe03-fe5a-4f26-8758-a2d5a4fa9c72,10077,2,5,3,,,1685551510.1188421,1685551512.5648477,1685551512.563364,2.4460055828094482,2.444521903991699
+create,device,9f5c62a1-a276-474c-9f37-1a1dde3e46b4,7369,12,3,,,,1685551512.5676408,1685551514.962743,1685551514.9499793,2.3951022624969482,2.382338523864746
+update,link,fcd32754-70fc-4248-ac3a-93021cd7eeb1,741,2,,,,,1685551514.965216,1685551517.201697,1685551517.2013958,2.236481189727783,2.236179828643799
+update,link,fcd32754-70fc-4248-ac3a-93021cd7eeb1,741,2,,,,,1685551632.1892412,1685551634.4381793,1685551634.4392478,2.2489380836486816,2.250006675720215
+update,link,fcd32754-70fc-4248-ac3a-93021cd7eeb1,741,2,,,,,1685551787.4531596,1685551789.7000508,1685551789.6998277,2.2468912601470947,2.2466681003570557
+create,slice,c1703a87-7b07-4466-a9ee-bb92542864ad,10454,2,5,3,0,2,1685551517.2102315,1685551519.6742518,1685551519.6702354,2.464020252227783,2.4600038528442383
+get,slice,cf38d9ce-7eb4-4074-aa11-a5443d596f72,12834,2,5,3,1,1,1685551519.6743221,1685551519.8157146,,0.14139246940612793,
+delete,device,329e4372-2a63-40b9-8648-33a673ab8362,59081,5,51,,,,1685551519.8203554,1685551522.3623474,1685551522.3503513,2.541991949081421,2.529995918273926
+delete,slice,cc0e831a-b232-48ae-8cce-92ea8fe7795f,9459,2,5,3,2,1,1685551522.3632205,1685551524.7451215,1685551524.7349424,2.3819010257720947,2.3717219829559326
+get,device,9f5c62a1-a276-474c-9f37-1a1dde3e46b4,7369,12,3,,,,1685551524.7483833,1685551524.8827255,,0.13434219360351562,
+delete,link,e9b46e15-c039-4ae8-a130-12f6413d4c91,741,2,,,,,1685551524.8841603,1685551527.1227734,1685551527.1151564,2.2386131286621094,2.2309961318969727
+create,service,9ea8c268-dd46-4dbe-8f03-bb6a85ad1d05,8485,2,5,3,,,1685551527.1298769,1685551529.5863743,1685551529.5211453,2.4564974308013916,2.391268491744995
+get,service,485bc2cb-df52-495a-a0cc-848225b7d205,10330,2,5,3,,,1685551529.5864882,1685551529.716742,,0.13025379180908203,
+get,service,485bc2cb-df52-495a-a0cc-848225b7d205,10330,2,5,3,,,1685551575.9945228,1685551576.1275547,,0.13303184509277344,
+create,link,134c8aab-0762-45be-952b-0d75b41611ae,741,2,,,,,1685551532.6577914,1685551534.9108157,1685551534.8987253,2.2530243396759033,2.240933895111084
+update,slice,9b729fad-649c-4e01-b932-5b8206d94a0e,7937,2,5,3,0,1,1685551537.446667,1685551539.8189833,1685551539.8151608,2.372316360473633,2.3684937953948975
+update,slice,9b729fad-649c-4e01-b932-5b8206d94a0e,10456,2,5,3,0,0,1685551665.5487685,1685551668.005505,1685551668.0001786,2.4567365646362305,2.4514100551605225
+delete,slice,ad536e1a-4519-4493-a330-8f3a53a15a3b,8762,2,5,3,2,0,1685551539.8196921,1685551542.1843796,1685551542.1840842,2.364687442779541,2.364392042160034
+create,device,1174ced1-aa18-4b29-bb34-1c7ae3f494f1,59681,29,44,,,,1685551542.2322102,1685551545.110037,1685551545.1000168,2.8778269290924072,2.8678066730499268
+update,service,67c4f4bb-4833-482f-a46f-825748cb69d5,11939,2,5,3,,,1685551545.1192079,1685551547.5961137,1685551547.592878,2.4769058227539062,2.473670244216919
+update,link,34c2418f-1f3b-4baf-b418-7572992d4e00,741,2,,,,,1685551547.5964348,1685551549.8433886,1685551549.8430817,2.2469537258148193,2.2466468811035156
+create,link,5105fd21-61c4-427e-ac88-6b1043c24a73,741,2,,,,,1685551550.114597,1685551552.366576,1685551552.3570826,2.251978874206543,2.242485523223877
+delete,link,0db95318-dc3e-47ff-8022-3c310a253988,741,2,,,,,1685551552.3682983,1685551554.651005,1685551554.6500874,2.2827067375183105,2.2817890644073486
+get,slice,ade47eb3-a986-491e-bb68-7393ae428868,9416,2,5,3,2,2,1685551554.651127,1685551554.7810473,,0.12992024421691895,
+delete,service,5bcc8f1a-b9f0-4e43-99a0-883013a19b37,10216,2,5,3,,,1685551554.7817748,1685551557.1432428,1685551557.1357858,2.3614680767059326,2.354011058807373
+delete,device,2275c9d6-6168-4b3f-8951-ef62ae0548f3,63552,21,48,,,,1685551557.1459448,1685551559.7055426,1685551559.694857,2.5595977306365967,2.5489120483398438
+create,service,764f4e02-d3aa-4174-98f4-8ffd04732fee,10295,2,5,3,,,1685551562.2599318,1685551564.7867947,1685551564.7863863,2.526862859725952,2.526454448699951
+update,device,665d2a49-404e-4216-9b3a-7047dcdd6fa6,100385,43,78,,,,1685551564.8586714,1685551567.9824412,1685551567.9199846,3.123769760131836,3.0613131523132324
+create,slice,bc4180fe-0142-4b5a-baa3-35da62402664,8915,2,5,3,0,0,1685551568.0703304,1685551570.5228522,1685551570.4809544,2.452521800994873,2.4106240272521973
+get,service,aad044fa-78f1-4da4-a8e2-8567650ff589,9536,2,5,3,,,1685551570.5229297,1685551570.6651251,,0.142195463180542,
+get,service,aad044fa-78f1-4da4-a8e2-8567650ff589,10143,2,5,3,,,1685551733.909156,1685551734.069682,,0.16052579879760742,
+delete,device,929e2270-88ae-4296-ba04-f568216737e5,40306,19,30,,,,1685551570.6718035,1685551573.2344115,1685551573.2207475,2.562608003616333,2.5489439964294434
+create,slice,47e607d4-673f-4e61-ba48-38cbd207216b,6375,2,5,3,0,0,1685551573.2411842,1685551575.6439104,1685551575.6396008,2.402726173400879,2.398416519165039
+get,device,7a90dab6-97dc-4399-a013-d1ded9787446,119192,25,99,,,,1685551575.6440308,1685551575.9924762,,0.34844541549682617,
+get,device,7a90dab6-97dc-4399-a013-d1ded9787446,119192,25,99,,,,1685551705.8930728,1685551706.2467399,,0.3536670207977295,
+get,device,7a90dab6-97dc-4399-a013-d1ded9787446,119192,25,99,,,,1685551771.4284158,1685551771.7772405,,0.34882473945617676,
+update,link,8845bb56-7159-4482-a5ea-4cc28deabca2,741,2,,,,,1685551581.4112277,1685551583.6502829,1685551583.6459482,2.2390551567077637,2.234720468521118
+delete,service,0f5073d4-0741-45e8-8337-d99ed4d0ecc1,10369,2,5,3,,,1685551583.6508014,1685551586.0128403,1685551586.0125017,2.3620388507843018,2.3617002964019775
+delete,slice,7b657e0d-cbbb-4f2f-8023-eda146380715,10466,2,5,3,1,1,1685551586.013314,1685551588.381968,1685551588.3788764,2.3686540126800537,2.3655624389648438
+create,service,81f13553-13c2-4d66-a5dd-00f2910d2fa7,9793,2,5,3,,,1685551588.386944,1685551590.8349524,1685551590.8205628,2.4480082988739014,2.4336187839508057
+delete,link,edf1bb76-a88d-4d01-8fd2-4fbfe5b7d4b1,741,2,,,,,1685551590.8368952,1685551593.0768569,1685551593.0718038,2.239961624145508,2.2349085807800293
+update,service,d7fa2455-534b-472e-95c5-89ceed522ece,9741,2,5,3,,,1685551593.0836427,1685551595.5312731,1685551595.519375,2.4476304054260254,2.435732364654541
+get,link,134c8aab-0762-45be-952b-0d75b41611ae,741,2,,,,,1685551595.5313585,1685551595.605301,,0.07394242286682129,
+get,slice,66b71048-a49f-425b-b03b-82cd89c07e9e,8686,2,5,3,0,2,1685551595.6055226,1685551595.7393212,,0.13379859924316406,
+get,slice,66b71048-a49f-425b-b03b-82cd89c07e9e,8686,2,5,3,0,2,1685551658.4262476,1685551658.5052984,,0.07905077934265137,
+create,link,6e5bf6cb-67a5-408b-b424-181ba8dd8a6c,741,2,,,,,1685551595.7398927,1685551598.008644,1685551597.9978936,2.268751382827759,2.2580008506774902
+create,device,582fe515-3bdd-4fb2-b304-efdc43129d89,123846,37,97,,,,1685551598.097416,1685551601.334739,1685551601.3197105,3.237323045730591,3.222294569015503
+get,device,520d566f-dba1-4f5d-977f-93f66bf63dcd,93414,29,74,,,,1685551601.3348978,1685551601.7219236,,0.3870258331298828,
+create,slice,10d75817-79a2-4c7b-993c-d567b0082343,12118,2,5,3,2,1,1685551601.7340324,1685551604.2488241,1685551604.2384698,2.51479172706604,2.5044374465942383
+create,device,f82f6403-e574-46ae-babd-943189c5d9f5,84332,7,74,,,,1685551611.697681,1685551614.6803381,1685551614.6431477,2.9826571941375732,2.9454667568206787
+update,slice,2e7867d1-69a7-4ccf-95a9-1a28c6e065c3,8634,2,5,3,1,0,1685551614.6860518,1685551617.1006696,1685551617.0921044,2.4146177768707275,2.406052589416504
+create,link,9dd315ce-cddc-491f-8d31-d4d2294fbcfc,741,2,,,,,1685551617.231301,1685551619.4776828,1685551619.477417,2.2463817596435547,2.2461159229278564
+create,service,c143c248-62d5-4cb2-9dc3-f9d8aee37336,11318,2,5,3,,,1685551619.4856474,1685551621.99489,1685551621.9457524,2.509242534637451,2.4601049423217773
+get,slice,0b5528f9-4716-44a2-a7f8-8aade21c819a,9640,2,5,3,0,0,1685551621.9950056,1685551622.1351752,,0.14016962051391602,
+get,slice,0b5528f9-4716-44a2-a7f8-8aade21c819a,9640,2,5,3,0,0,1685551698.6688619,1685551698.7992246,,0.13036274909973145,
+delete,link,43898698-7edd-4a04-ab88-45af1295ed15,741,2,,,,,1685551622.2146704,1685551624.484308,1685551624.4894598,2.2696375846862793,2.274789333343506
+delete,device,582fe515-3bdd-4fb2-b304-efdc43129d89,123846,37,97,,,,1685551624.4888756,1685551627.4300606,1685551627.3869514,2.9411849975585938,2.898075819015503
+delete,service,d7fa2455-534b-472e-95c5-89ceed522ece,9741,2,5,3,,,1685551627.4322464,1685551629.815754,1685551629.812858,2.383507490158081,2.3806116580963135
+delete,slice,ade47eb3-a986-491e-bb68-7393ae428868,9416,2,5,3,2,2,1685551629.8162563,1685551632.188776,1685551632.184917,2.3725197315216064,2.3686606884002686
+delete,link,8f75d465-e88a-43dd-b4ee-47acb3f4a513,741,2,,,,,1685551634.4385657,1685551636.7195318,1685551636.7192643,2.28096604347229,2.280698537826538
+create,service,6b149397-a748-4419-9574-cb3511c2647a,11061,2,5,3,,,1685551636.727245,1685551639.1855714,1685551639.1781013,2.4583263397216797,2.4508562088012695
+delete,service,c143c248-62d5-4cb2-9dc3-f9d8aee37336,11318,2,5,3,,,1685551641.6394057,1685551644.0306408,1685551644.0303977,2.391235113143921,2.3909919261932373
+create,device,009213b0-bd6f-4db8-bc43-ce48051ab004,123154,47,97,,,,1685551644.1042778,1685551647.5004478,1685551647.4948719,3.396169900894165,3.390594005584717
+delete,slice,bc4180fe-0142-4b5a-baa3-35da62402664,8915,2,5,3,0,0,1685551647.6362333,1685551649.9817786,1685551649.9900613,2.3455452919006348,2.353827953338623
+update,service,aad044fa-78f1-4da4-a8e2-8567650ff589,10143,2,5,3,,,1685551649.989738,1685551652.4398003,1685551652.4388824,2.4500622749328613,2.4491443634033203
+delete,device,376c39c4-9d47-40a8-b998-79c9c82ea21e,94419,38,69,,,,1685551655.372267,1685551658.0953927,1685551658.0509965,2.723125696182251,2.67872953414917
+get,link,9dd315ce-cddc-491f-8d31-d4d2294fbcfc,741,2,,,,,1685551658.5095925,1685551658.5794559,,0.06986331939697266,
+get,link,9dd315ce-cddc-491f-8d31-d4d2294fbcfc,741,2,,,,,1685551670.4140606,1685551670.4835675,,0.06950688362121582,
+create,link,1a87dd8a-01bd-49f5-aac5-a4f3060f450f,741,2,,,,,1685551658.579857,1685551660.8306692,1685551660.830423,2.25081205368042,2.250566005706787
+create,slice,585e6333-9bbd-48b3-bb20-44aef31870d4,8761,2,5,3,2,1,1685551660.8372355,1685551663.2505548,1685551663.2404203,2.4133193492889404,2.4031848907470703
+update,link,d84ff26e-fdbc-44db-bc2a-7e2367eb96b5,741,2,,,,,1685551663.2510135,1685551665.5402713,1685551665.536526,2.289257764816284,2.2855124473571777
+update,link,d84ff26e-fdbc-44db-bc2a-7e2367eb96b5,741,2,,,,,1685551701.4071383,1685551703.6475472,1685551703.6496284,2.2404088973999023,2.24249005317688
+get,service,9ea8c268-dd46-4dbe-8f03-bb6a85ad1d05,8485,2,5,3,,,1685551668.006506,1685551668.137947,,0.1314411163330078,
+delete,link,6e5bf6cb-67a5-408b-b424-181ba8dd8a6c,741,2,,,,,1685551668.1382875,1685551670.41394,1685551670.4136076,2.2756524085998535,2.275320053100586
+delete,service,81f13553-13c2-4d66-a5dd-00f2910d2fa7,9793,2,5,3,,,1685551670.4840991,1685551672.8540692,1685551672.849283,2.3699700832366943,2.3651838302612305
+delete,slice,659ad2b9-ca89-4f3b-80cb-b2fa70eb32ad,10403,2,5,3,0,2,1685551672.854681,1685551675.2229414,1685551675.214718,2.368260383605957,2.360037088394165
+create,device,d4be4dfb-3c9e-4efe-8848-9330211845a3,54047,30,39,,,,1685551675.2583303,1685551678.0907474,1685551678.0749848,2.8324170112609863,2.8166544437408447
+create,link,44ab52bc-8122-4120-9028-80ce6b14ad25,741,2,,,,,1685551678.0912683,1685551680.3429492,1685551680.3369262,2.251680850982666,2.2456579208374023
+update,service,cb73abe5-84a5-4b3e-a1b7-5e3ace45dc7c,8797,2,5,3,,,1685551680.3494549,1685551682.7618663,1685551682.7532427,2.4124114513397217,2.403787851333618
+update,service,cb73abe5-84a5-4b3e-a1b7-5e3ace45dc7c,10272,2,5,3,,,1685551721.6509228,1685551724.1416194,1685551724.1344256,2.490696668624878,2.4835028648376465
+delete,device,ae8f46d0-fb10-4b2f-a2c0-52532842b959,64059,3,54,,,,1685551682.7633183,1685551685.3281121,1685551685.3128889,2.564793825149536,2.5495705604553223
+get,slice,585e6333-9bbd-48b3-bb20-44aef31870d4,8761,2,5,3,2,1,1685551688.4455097,1685551688.5802143,,0.13470458984375,
+create,slice,b0a7ffb1-64b1-450b-b137-3c30ced9b40a,10581,2,5,3,0,2,1685551688.5882866,1685551691.0329685,1685551691.026362,2.4446818828582764,2.438075304031372
+create,service,4b2faafb-59d2-4bc3-800d-d33cd1b83e2a,10924,2,5,3,,,1685551691.040513,1685551693.4831407,1685551693.479395,2.4426276683807373,2.4388818740844727
+delete,slice,3a0d00fa-b499-4ac7-89a2-c5d46d7f2695,9437,2,5,3,0,2,1685551693.4836872,1685551695.8622184,1685551695.8528845,2.3785312175750732,2.369197368621826
+create,device,21fe9d74-5a4f-4bdb-98a7-daba70c8d01b,32817,43,16,,,,1685551695.881357,1685551698.6687891,1685551698.6113045,2.7874321937561035,2.729947566986084
+update,slice,585e6333-9bbd-48b3-bb20-44aef31870d4,9963,2,5,3,1,0,1685551698.8048673,1685551701.406489,1685551701.357979,2.601621627807617,2.5531117916107178
+update,slice,585e6333-9bbd-48b3-bb20-44aef31870d4,9928,2,5,3,1,2,1685551756.7014713,1685551759.151424,1685551759.1452541,2.4499526023864746,2.4437828063964844
+create,link,daf685d6-e25b-406e-98d0-8de5c21145a7,741,2,,,,,1685551703.6483064,1685551705.8911757,1685551705.8866465,2.2428693771362305,2.238340139389038
+create,slice,4069957c-06c9-41bb-a978-604e45068545,10776,2,5,3,1,0,1685551706.2549407,1685551708.6988103,1685551708.6878905,2.4438695907592773,2.4329497814178467
+delete,link,1d65d3c5-81a1-4780-a313-97609c641a3c,741,2,,,,,1685551708.7706954,1685551711.0563326,1685551711.052283,2.285637140274048,2.281587600708008
+delete,device,009213b0-bd6f-4db8-bc43-ce48051ab004,123154,47,97,,,,1685551711.0604467,1685551713.813763,1685551713.7924583,2.7533161640167236,2.732011556625366
+create,service,8a2f1713-d0a8-4486-9739-abeba8bd0a5c,8627,2,5,3,,,1685551713.8217707,1685551716.2711382,1685551716.2238693,2.4493675231933594,2.4020986557006836
+delete,service,1c96b51c-6854-4198-9911-9044e0362420,8966,2,5,3,,,1685551716.2716923,1685551718.622564,1685551718.620924,2.3508718013763428,2.349231719970703
+delete,slice,b0a7ffb1-64b1-450b-b137-3c30ced9b40a,10581,2,5,3,0,2,1685551729.1033537,1685551731.4747972,1685551731.467597,2.371443510055542,2.364243268966675
+create,service,a7eeab1f-d2cc-420a-99d0-fea9aa4ee9de,9417,2,5,3,,,1685551731.482912,1685551733.9071982,1685551733.9089582,2.424286127090454,2.426046133041382
+delete,service,cb73abe5-84a5-4b3e-a1b7-5e3ace45dc7c,10272,2,5,3,,,1685551734.073082,1685551736.4423096,1685551736.4398165,2.369227647781372,2.366734504699707
+delete,link,d84ff26e-fdbc-44db-bc2a-7e2367eb96b5,741,2,,,,,1685551736.4425604,1685551738.712409,1685551738.7183769,2.269848585128784,2.2758164405822754
+delete,device,b8a29228-6901-4de5-86d6-4b654ec360d7,87352,10,83,,,,1685551741.3236194,1685551743.998507,1685551743.9933836,2.6748876571655273,2.669764280319214
+create,device,d541e7f5-cdcf-4392-aab5-54338af95fbb,49952,15,39,,,,1685551744.0306818,1685551746.772043,1685551746.7568028,2.741361141204834,2.726120948791504
+get,link,e9250f5c-3238-441f-b34a-51d741457eda,741,2,,,,,1685551746.7722058,1685551746.848413,,0.07620716094970703,
+update,device,d4be4dfb-3c9e-4efe-8848-9330211845a3,22013,4,18,,,,1685551746.864188,1685551749.4715059,1685551749.4145305,2.6073179244995117,2.550342559814453
+create,link,c4f89cd2-a828-4703-98c9-bf611338a6d3,741,2,,,,,1685551749.4721024,1685551751.7152708,1685551751.7103086,2.243168354034424,2.238206148147583
+create,slice,43ad80b1-4f11-4998-91b6-a95cd5bdca3a,8941,2,5,3,0,2,1685551751.7255235,1685551754.201833,1685551754.1972418,2.4763095378875732,2.4717183113098145
+delete,slice,c1703a87-7b07-4466-a9ee-bb92542864ad,10454,2,5,3,0,2,1685551754.2022882,1685551756.5625792,1685551756.5555565,2.360291004180908,2.3532683849334717
+get,link,44ab52bc-8122-4120-9028-80ce6b14ad25,741,2,,,,,1685551759.1515555,1685551759.2260861,,0.07453060150146484,
+create,slice,36e364e9-1536-4a0f-9aa9-0bd356c44816,10756,2,5,3,2,2,1685551759.2344306,1685551761.689702,1685551761.6747215,2.4552714824676514,2.440290927886963
+update,service,485bc2cb-df52-495a-a0cc-848225b7d205,8183,2,5,3,,,1685551761.6930046,1685551764.0977664,1685551764.0801072,2.404761791229248,2.3871026039123535
+get,slice,2e7867d1-69a7-4ccf-95a9-1a28c6e065c3,8634,2,5,3,1,0,1685551764.097879,1685551764.2280712,,0.13019227981567383,
+delete,service,041f8439-8b83-4ec1-a095-05c3fde21822,7956,2,5,3,,,1685551764.228764,1685551766.573736,1685551766.5655613,2.3449718952178955,2.3367972373962402
+delete,device,d541e7f5-cdcf-4392-aab5-54338af95fbb,49952,15,39,,,,1685551766.5752642,1685551769.1734567,1685551769.1125138,2.5981924533843994,2.5372495651245117
+create,link,94b13c6f-2149-4246-a175-b7eeb5166ba5,741,2,,,,,1685551769.1765494,1685551771.4283528,1685551771.4281175,2.251803398132324,2.251568078994751
+delete,link,e9250f5c-3238-441f-b34a-51d741457eda,741,2,,,,,1685551774.8319976,1685551777.1097817,1685551777.107385,2.2777841091156006,2.2753872871398926
+update,link,134c8aab-0762-45be-952b-0d75b41611ae,741,2,,,,,1685551777.1103046,1685551779.3681242,1685551779.3632483,2.257819652557373,2.252943754196167
+create,device,47110673-332b-4405-bf9a-abf95b6bd5c8,109475,36,87,,,,1685551779.4361403,1685551782.5730355,1685551782.4890554,3.136895179748535,3.052915096282959
+create,service,619a5f82-8ac1-4864-bddb-738a6ce4d3d8,10208,2,5,3,,,1685551782.5815988,1685551785.0320668,1685551785.0227664,2.450468063354492,2.4411675930023193
+delete,link,1d1776dc-20d8-4a6e-a768-edba25c7f31d,741,2,,,,,1685551785.032428,1685551787.319211,1685551787.3190014,2.28678297996521,2.2865734100341797
+create,slice,4f4951a9-bece-4ff8-9efd-0bc607e97ff7,10720,2,5,3,1,0,1685551789.7083845,1685551792.1994576,1685551792.1600926,2.4910731315612793,2.4517080783843994
+get,device,1174ced1-aa18-4b29-bb34-1c7ae3f494f1,59681,29,44,,,,1685551792.1995728,1685551792.5511377,,0.351564884185791,
+create,service,c654bff6-da80-4e9b-bbbd-257d2da2727d,8791,2,5,3,,,1685551792.5594754,1685551794.9632277,1685551794.9619675,2.403752326965332,2.402492046356201
+get,service,764f4e02-d3aa-4174-98f4-8ffd04732fee,10295,2,5,3,,,1685551794.9633596,1685551795.0931706,,0.12981104850769043,
diff --git a/hackfest/commands.txt b/hackfest/commands.txt
index 31558364d74aa1fec729c80c9fab50aa7e0c2313..1b5d03dd4f8b64521401f1ab81bc5c2066eb68c4 100644
--- a/hackfest/commands.txt
+++ b/hackfest/commands.txt
@@ -115,6 +115,9 @@ python3 client_connection.py
 cd ~/tfs-ctrl/hackfest/tapi/server
 pip install -r requirements.txt
 
+cd ~/tfs-ctrl/hackfest/tapi/tapi_app
+./requirements.sh
+
 # (done) Build & Implement methods for the TAPI v2.1.3 server:
 cd ~/tfs-ctrl/hackfest/tapi
 wget https://repo1.maven.org/maven2/io/swagger/codegen/v3/swagger-codegen-cli/3.0.35/swagger-codegen-cli-3.0.35.jar
@@ -134,7 +137,7 @@ cd ~/tfs-ctrl/hackfest/tapi/server
 python3 -m tapi_server 8080 database/mini-ols-context.json
 
 # Run TAPI client using cURL (In a new window):
-$ cd ~/tfs-ctrl/hackfest/tapi/client
+cd ~/tfs-ctrl/hackfest/tapi/client
 
 # Interrogate Context and SIPs:
 curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/tapi-common:context/
@@ -163,6 +166,7 @@ curl -X DELETE -H "Content-Type: application/json" http://127.0.0.1:8080/restcon
 
 
 ## EXERCISE
+
 # Exercise: retrieve and draw the topology
 # solution in folder tapi_app
 
@@ -175,24 +179,32 @@ python3 tapi_app.py
 # Deploy TeraFlowSDN
 ################################################################################
 
-# Check status of Kubernetes
+## GUIDED
+
+# Check status of MicroK8s
 microk8s.status --wait-ready
 
+# If not running, start MicroK8s
+microk8s.start
+
+# Periodically inspect status of MicroK8s until all addons are enabled
+watch -n 1 microk8s.status --wait-ready
+
 # Check all resources in Kubernetes
-microk8s.kubectl get all --all-namespaces
+watch -n 1 kubectl get all --all-namespaces
 
 # Deploy TeraFlowSDN
 cd ~/tfs-ctrl
 source my_deploy.sh 
-./deploy.sh 
+./deploy/all.sh 
 
 # Show status of your deployment
 (if new terminal) cd ~/tfs-ctrl && source my_deploy.sh
-./show_deploy.sh 
+./deploy/show.sh
 
 # Show logs of a specific component
 (if new terminal) cd ~/tfs-ctrl && source my_deploy.sh
-scripts/show_logs_device.sh
+./scripts/show_logs_device.sh
 
 
 
@@ -202,6 +214,8 @@ scripts/show_logs_device.sh
 
 # (done) Build a Netconf server supporting basic OpenConfig data model
 
+## GUIDED
+
 # Start the Netconf/OpenConfig server
 cd ~/tfs-ctrl/hackfest/netconf-oc
 python3 server_openconfig.py 8300
@@ -212,7 +226,8 @@ python3 server_openconfig.py 8300
 # Service requests
 ################################################################################
 
-## L3VPN service from JSON descriptors
+## EXERCISE
+# Exercise: L3VPN service from JSON descriptors
 
 # (in a new terminal) Start OLS TAPI server:
 cd ~/tfs-ctrl/hackfest/tapi/server
@@ -236,9 +251,8 @@ python3 server_openconfig.py 8304
 
 
 
-############
-# Mock OSM
-############
+## EXERCISE
+# Exercise: L2VPN slice from Mock OSM
 
 $ cd ~/tfs-ctrl/hackfest/
 $ python -m mock_osm
@@ -262,12 +276,65 @@ Service b8c99e2c-39d8-424d-9833-554634269555 deleted
 (mock-osm) exit
 Bye!
 
+
+
+############
+# gRPC
+############
+
+## GUIDED
+
+# Generate connection messages from .proto
+cd ~/tfs-ctrl/hackfest/grpc
+python -m grpc_tools.protoc -I=. --python_out=connection/ connection.proto
+
+# Create a connection message and save to a file
+cd ~/tfs-ctrl/hackfest/grpc/connection
+python3 create.py connection.txt 
+
+# List a connection from a file
+cd ~/tfs-ctrl/hackfest/grpc/connection
+python3 list.py connection.txt 
+
+# Build ConnectionService from .proto
+cd ~/tfs-ctrl/hackfest/grpc
+python -m grpc_tools.protoc -I=. --python_out=connectionService/ --grpc_python_out=connectionService/ connectionService.proto
+
+# Start ConnectionService server
+cd ~/tfs-ctrl/hackfest/grpc/connectionService
+python3 connectionService_server.py
+
+# Start ConnectionService client (in another terminal)
+cd ~/tfs-ctrl/hackfest/grpc/connectionService
+python3 connectionService_client.py
+
+
+## EXERCISE
+# Exercise: add streams
+
+# Build ConnectionServiceWithNotif from .proto
+cd ~/tfs-ctrl/hackfest/grpc
+python -m grpc_tools.protoc -I=. --python_out=connectionServiceWithNotif/ --grpc_python_out=connectionServiceWithNotif/ connectionServiceWithNotif.proto
+
+## Solution:
+# Run ConnectionServiceWithNotif server
+cd ~/tfs-ctrl/hackfest/grpc/connectionServiceWithNotif
+python3 connectionServiceWithNotif_server.py
+
+# Run ConnectionServiceWithNotif client (in another terminal)
+$ cd ~/tfs-ctrl/hackfest/grpc/connectionServiceWithNotif
+$ python3 connectionServiceWithNotif_client.py
+
+
+
 ############
 # gNMI
 ############
 
+## GUIDED
+
 ## Download and install the latest release
-$ sudo bash -c "$(curl -sL https://get.containerlab.dev)“
+$ sudo bash -c "$(curl -sL https://get.containerlab.dev)"
 
 ## Deploy proposed two SR node scenario
 $ cd tfs-ctrl/hackfest/gnmi
diff --git a/hackfest/gnmi/sonic.clab.yml b/hackfest/gnmi/srlinux.clab.yml
similarity index 83%
rename from hackfest/gnmi/sonic.clab.yml
rename to hackfest/gnmi/srlinux.clab.yml
index 47c1e64643a70e3e0caff12aff8a6796598cea1f..a589292ac5b58664646ab7d3cccebfd62c28a540 100644
--- a/hackfest/gnmi/sonic.clab.yml
+++ b/hackfest/gnmi/srlinux.clab.yml
@@ -12,18 +12,17 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# file: sonic.clab.yml
-name: sonic-vs
+# file: srlinux.clab.yml
+name: srlinux
 
 topology:
   nodes:
     srl1:
-      kind: sonic-vs
-      image: docker-sonic-vs
+      kind: srl
+      image: ghcr.io/nokia/srlinux
     srl2:
-      kind: sonic-vs
-      image: docker-sonic-vs
+      kind: srl
+      image: ghcr.io/nokia/srlinux
 
   links:
     - endpoints: ["srl1:e1-1", "srl2:e1-1"]
-
diff --git a/hackfest/grpc/connection/connection_pb2.py b/hackfest/grpc/connection/connection_pb2.py
index e66b665b22303fbf582de9ec378591fae4e09659..4d642577df514be773ce4dc20df2cf34380410c1 100644
--- a/hackfest/grpc/connection/connection_pb2.py
+++ b/hackfest/grpc/connection/connection_pb2.py
@@ -1,9 +1,9 @@
+# -*- coding: utf-8 -*-
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: connection.proto
-
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+"""Generated protocol buffer code."""
 from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
 from google.protobuf import message as _message
 from google.protobuf import reflection as _reflection
 from google.protobuf import symbol_database as _symbol_database
@@ -14,163 +14,34 @@ _sym_db = _symbol_database.Default()
 
 
 
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='connection.proto',
-  package='connection',
-  syntax='proto3',
-  serialized_options=None,
-  serialized_pb=_b('\n\x10\x63onnection.proto\x12\nconnection\"\xf5\x01\n\nConnection\x12\x14\n\x0c\x63onnectionId\x18\x01 \x01(\t\x12\x12\n\nsourceNode\x18\x02 \x01(\t\x12\x12\n\ntargetNode\x18\x03 \x01(\t\x12\x12\n\nsourcePort\x18\x04 \x01(\t\x12\x12\n\ntargetPort\x18\x05 \x01(\t\x12\x11\n\tbandwidth\x18\x06 \x01(\r\x12\x43\n\x11layerProtocolName\x18\x07 \x01(\x0e\x32(.connection.Connection.LayerProtocolName\")\n\x11LayerProtocolName\x12\x07\n\x03\x45TH\x10\x00\x12\x0b\n\x07OPTICAL\x10\x01\"<\n\x0e\x43onnectionList\x12*\n\nconnection\x18\x01 \x03(\x0b\x32\x16.connection.Connectionb\x06proto3')
-)
-
-
-
-_CONNECTION_LAYERPROTOCOLNAME = _descriptor.EnumDescriptor(
-  name='LayerProtocolName',
-  full_name='connection.Connection.LayerProtocolName',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='ETH', index=0, number=0,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='OPTICAL', index=1, number=1,
-      serialized_options=None,
-      type=None),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=237,
-  serialized_end=278,
-)
-_sym_db.RegisterEnumDescriptor(_CONNECTION_LAYERPROTOCOLNAME)
-
-
-_CONNECTION = _descriptor.Descriptor(
-  name='Connection',
-  full_name='connection.Connection',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connectionId', full_name='connection.Connection.connectionId', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='sourceNode', full_name='connection.Connection.sourceNode', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='targetNode', full_name='connection.Connection.targetNode', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='sourcePort', full_name='connection.Connection.sourcePort', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='targetPort', full_name='connection.Connection.targetPort', index=4,
-      number=5, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='bandwidth', full_name='connection.Connection.bandwidth', index=5,
-      number=6, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='layerProtocolName', full_name='connection.Connection.layerProtocolName', index=6,
-      number=7, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-    _CONNECTION_LAYERPROTOCOLNAME,
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=33,
-  serialized_end=278,
-)
-
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10\x63onnection.proto\x12\nconnection\"\xf5\x01\n\nConnection\x12\x14\n\x0c\x63onnectionId\x18\x01 \x01(\t\x12\x12\n\nsourceNode\x18\x02 \x01(\t\x12\x12\n\ntargetNode\x18\x03 \x01(\t\x12\x12\n\nsourcePort\x18\x04 \x01(\t\x12\x12\n\ntargetPort\x18\x05 \x01(\t\x12\x11\n\tbandwidth\x18\x06 \x01(\r\x12\x43\n\x11layerProtocolName\x18\x07 \x01(\x0e\x32(.connection.Connection.LayerProtocolName\")\n\x11LayerProtocolName\x12\x07\n\x03\x45TH\x10\x00\x12\x0b\n\x07OPTICAL\x10\x01\"<\n\x0e\x43onnectionList\x12*\n\nconnection\x18\x01 \x03(\x0b\x32\x16.connection.Connectionb\x06proto3')
 
-_CONNECTIONLIST = _descriptor.Descriptor(
-  name='ConnectionList',
-  full_name='connection.ConnectionList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connection', full_name='connection.ConnectionList.connection', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=280,
-  serialized_end=340,
-)
 
-_CONNECTION.fields_by_name['layerProtocolName'].enum_type = _CONNECTION_LAYERPROTOCOLNAME
-_CONNECTION_LAYERPROTOCOLNAME.containing_type = _CONNECTION
-_CONNECTIONLIST.fields_by_name['connection'].message_type = _CONNECTION
-DESCRIPTOR.message_types_by_name['Connection'] = _CONNECTION
-DESCRIPTOR.message_types_by_name['ConnectionList'] = _CONNECTIONLIST
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
-Connection = _reflection.GeneratedProtocolMessageType('Connection', (_message.Message,), dict(
-  DESCRIPTOR = _CONNECTION,
-  __module__ = 'connection_pb2'
+_CONNECTION = DESCRIPTOR.message_types_by_name['Connection']
+_CONNECTIONLIST = DESCRIPTOR.message_types_by_name['ConnectionList']
+_CONNECTION_LAYERPROTOCOLNAME = _CONNECTION.enum_types_by_name['LayerProtocolName']
+Connection = _reflection.GeneratedProtocolMessageType('Connection', (_message.Message,), {
+  'DESCRIPTOR' : _CONNECTION,
+  '__module__' : 'connection_pb2'
   # @@protoc_insertion_point(class_scope:connection.Connection)
-  ))
+  })
 _sym_db.RegisterMessage(Connection)
 
-ConnectionList = _reflection.GeneratedProtocolMessageType('ConnectionList', (_message.Message,), dict(
-  DESCRIPTOR = _CONNECTIONLIST,
-  __module__ = 'connection_pb2'
+ConnectionList = _reflection.GeneratedProtocolMessageType('ConnectionList', (_message.Message,), {
+  'DESCRIPTOR' : _CONNECTIONLIST,
+  '__module__' : 'connection_pb2'
   # @@protoc_insertion_point(class_scope:connection.ConnectionList)
-  ))
+  })
 _sym_db.RegisterMessage(ConnectionList)
 
+if _descriptor._USE_C_DESCRIPTORS == False:
 
+  DESCRIPTOR._options = None
+  _CONNECTION._serialized_start=33
+  _CONNECTION._serialized_end=278
+  _CONNECTION_LAYERPROTOCOLNAME._serialized_start=237
+  _CONNECTION_LAYERPROTOCOLNAME._serialized_end=278
+  _CONNECTIONLIST._serialized_start=280
+  _CONNECTIONLIST._serialized_end=340
 # @@protoc_insertion_point(module_scope)
diff --git a/hackfest/grpc/connectionService/connectionService_pb2.py b/hackfest/grpc/connectionService/connectionService_pb2.py
index 9f1951fa92a017baf4f44470e833aae8d74e0f3b..a7efb7d21aa948134388dd6918a57d816ba4bcff 100644
--- a/hackfest/grpc/connectionService/connectionService_pb2.py
+++ b/hackfest/grpc/connectionService/connectionService_pb2.py
@@ -1,9 +1,9 @@
+# -*- coding: utf-8 -*-
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: connectionService.proto
-
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+"""Generated protocol buffer code."""
 from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
 from google.protobuf import message as _message
 from google.protobuf import reflection as _reflection
 from google.protobuf import symbol_database as _symbol_database
@@ -15,197 +15,37 @@ _sym_db = _symbol_database.Default()
 from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
 
 
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='connectionService.proto',
-  package='connection',
-  syntax='proto3',
-  serialized_options=None,
-  serialized_pb=_b('\n\x17\x63onnectionService.proto\x12\nconnection\x1a\x1bgoogle/protobuf/empty.proto\"\xf5\x01\n\nConnection\x12\x14\n\x0c\x63onnectionId\x18\x01 \x01(\t\x12\x12\n\nsourceNode\x18\x02 \x01(\t\x12\x12\n\ntargetNode\x18\x03 \x01(\t\x12\x12\n\nsourcePort\x18\x04 \x01(\t\x12\x12\n\ntargetPort\x18\x05 \x01(\t\x12\x11\n\tbandwidth\x18\x06 \x01(\r\x12\x43\n\x11layerProtocolName\x18\x07 \x01(\x0e\x32(.connection.Connection.LayerProtocolName\")\n\x11LayerProtocolName\x12\x07\n\x03\x45TH\x10\x00\x12\x0b\n\x07OPTICAL\x10\x01\"<\n\x0e\x43onnectionList\x12*\n\nconnection\x18\x01 \x03(\x0b\x32\x16.connection.Connection2\xa1\x01\n\x11\x43onnectionService\x12\x44\n\x10\x43reateConnection\x12\x16.connection.Connection\x1a\x16.google.protobuf.Empty\"\x00\x12\x46\n\x0eListConnection\x12\x16.google.protobuf.Empty\x1a\x1a.connection.ConnectionList\"\x00\x62\x06proto3')
-  ,
-  dependencies=[google_dot_protobuf_dot_empty__pb2.DESCRIPTOR,])
-
-
-
-_CONNECTION_LAYERPROTOCOLNAME = _descriptor.EnumDescriptor(
-  name='LayerProtocolName',
-  full_name='connection.Connection.LayerProtocolName',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='ETH', index=0, number=0,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='OPTICAL', index=1, number=1,
-      serialized_options=None,
-      type=None),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=273,
-  serialized_end=314,
-)
-_sym_db.RegisterEnumDescriptor(_CONNECTION_LAYERPROTOCOLNAME)
-
-
-_CONNECTION = _descriptor.Descriptor(
-  name='Connection',
-  full_name='connection.Connection',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connectionId', full_name='connection.Connection.connectionId', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='sourceNode', full_name='connection.Connection.sourceNode', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='targetNode', full_name='connection.Connection.targetNode', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='sourcePort', full_name='connection.Connection.sourcePort', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='targetPort', full_name='connection.Connection.targetPort', index=4,
-      number=5, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='bandwidth', full_name='connection.Connection.bandwidth', index=5,
-      number=6, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='layerProtocolName', full_name='connection.Connection.layerProtocolName', index=6,
-      number=7, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-    _CONNECTION_LAYERPROTOCOLNAME,
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=69,
-  serialized_end=314,
-)
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x63onnectionService.proto\x12\nconnection\x1a\x1bgoogle/protobuf/empty.proto\"\xf5\x01\n\nConnection\x12\x14\n\x0c\x63onnectionId\x18\x01 \x01(\t\x12\x12\n\nsourceNode\x18\x02 \x01(\t\x12\x12\n\ntargetNode\x18\x03 \x01(\t\x12\x12\n\nsourcePort\x18\x04 \x01(\t\x12\x12\n\ntargetPort\x18\x05 \x01(\t\x12\x11\n\tbandwidth\x18\x06 \x01(\r\x12\x43\n\x11layerProtocolName\x18\x07 \x01(\x0e\x32(.connection.Connection.LayerProtocolName\")\n\x11LayerProtocolName\x12\x07\n\x03\x45TH\x10\x00\x12\x0b\n\x07OPTICAL\x10\x01\"<\n\x0e\x43onnectionList\x12*\n\nconnection\x18\x01 \x03(\x0b\x32\x16.connection.Connection2\xa1\x01\n\x11\x43onnectionService\x12\x44\n\x10\x43reateConnection\x12\x16.connection.Connection\x1a\x16.google.protobuf.Empty\"\x00\x12\x46\n\x0eListConnection\x12\x16.google.protobuf.Empty\x1a\x1a.connection.ConnectionList\"\x00\x62\x06proto3')
 
 
-_CONNECTIONLIST = _descriptor.Descriptor(
-  name='ConnectionList',
-  full_name='connection.ConnectionList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connection', full_name='connection.ConnectionList.connection', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=316,
-  serialized_end=376,
-)
 
-_CONNECTION.fields_by_name['layerProtocolName'].enum_type = _CONNECTION_LAYERPROTOCOLNAME
-_CONNECTION_LAYERPROTOCOLNAME.containing_type = _CONNECTION
-_CONNECTIONLIST.fields_by_name['connection'].message_type = _CONNECTION
-DESCRIPTOR.message_types_by_name['Connection'] = _CONNECTION
-DESCRIPTOR.message_types_by_name['ConnectionList'] = _CONNECTIONLIST
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-Connection = _reflection.GeneratedProtocolMessageType('Connection', (_message.Message,), dict(
-  DESCRIPTOR = _CONNECTION,
-  __module__ = 'connectionService_pb2'
+_CONNECTION = DESCRIPTOR.message_types_by_name['Connection']
+_CONNECTIONLIST = DESCRIPTOR.message_types_by_name['ConnectionList']
+_CONNECTION_LAYERPROTOCOLNAME = _CONNECTION.enum_types_by_name['LayerProtocolName']
+Connection = _reflection.GeneratedProtocolMessageType('Connection', (_message.Message,), {
+  'DESCRIPTOR' : _CONNECTION,
+  '__module__' : 'connectionService_pb2'
   # @@protoc_insertion_point(class_scope:connection.Connection)
-  ))
+  })
 _sym_db.RegisterMessage(Connection)
 
-ConnectionList = _reflection.GeneratedProtocolMessageType('ConnectionList', (_message.Message,), dict(
-  DESCRIPTOR = _CONNECTIONLIST,
-  __module__ = 'connectionService_pb2'
+ConnectionList = _reflection.GeneratedProtocolMessageType('ConnectionList', (_message.Message,), {
+  'DESCRIPTOR' : _CONNECTIONLIST,
+  '__module__' : 'connectionService_pb2'
   # @@protoc_insertion_point(class_scope:connection.ConnectionList)
-  ))
+  })
 _sym_db.RegisterMessage(ConnectionList)
 
-
-
-_CONNECTIONSERVICE = _descriptor.ServiceDescriptor(
-  name='ConnectionService',
-  full_name='connection.ConnectionService',
-  file=DESCRIPTOR,
-  index=0,
-  serialized_options=None,
-  serialized_start=379,
-  serialized_end=540,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='CreateConnection',
-    full_name='connection.ConnectionService.CreateConnection',
-    index=0,
-    containing_service=None,
-    input_type=_CONNECTION,
-    output_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
-    serialized_options=None,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListConnection',
-    full_name='connection.ConnectionService.ListConnection',
-    index=1,
-    containing_service=None,
-    input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
-    output_type=_CONNECTIONLIST,
-    serialized_options=None,
-  ),
-])
-_sym_db.RegisterServiceDescriptor(_CONNECTIONSERVICE)
-
-DESCRIPTOR.services_by_name['ConnectionService'] = _CONNECTIONSERVICE
-
+_CONNECTIONSERVICE = DESCRIPTOR.services_by_name['ConnectionService']
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  _CONNECTION._serialized_start=69
+  _CONNECTION._serialized_end=314
+  _CONNECTION_LAYERPROTOCOLNAME._serialized_start=273
+  _CONNECTION_LAYERPROTOCOLNAME._serialized_end=314
+  _CONNECTIONLIST._serialized_start=316
+  _CONNECTIONLIST._serialized_end=376
+  _CONNECTIONSERVICE._serialized_start=379
+  _CONNECTIONSERVICE._serialized_end=540
 # @@protoc_insertion_point(module_scope)
diff --git a/hackfest/grpc/connectionService/connectionService_pb2_grpc.py b/hackfest/grpc/connectionService/connectionService_pb2_grpc.py
index 94ffffbf7fd3c90b541f36bd1aac6f23e1b5913b..0278d6fa443960a5fcfdb166e5dbeea3b31b6cc2 100644
--- a/hackfest/grpc/connectionService/connectionService_pb2_grpc.py
+++ b/hackfest/grpc/connectionService/connectionService_pb2_grpc.py
@@ -1,4 +1,5 @@
 # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
 import grpc
 
 import connectionService_pb2 as connectionService__pb2
@@ -6,59 +7,94 @@ from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
 
 
 class ConnectionServiceStub(object):
-  # missing associated documentation comment in .proto file
-  pass
+    """Missing associated documentation comment in .proto file."""
 
-  def __init__(self, channel):
-    """Constructor.
+    def __init__(self, channel):
+        """Constructor.
 
-    Args:
-      channel: A grpc.Channel.
-    """
-    self.CreateConnection = channel.unary_unary(
-        '/connection.ConnectionService/CreateConnection',
-        request_serializer=connectionService__pb2.Connection.SerializeToString,
-        response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
-        )
-    self.ListConnection = channel.unary_unary(
-        '/connection.ConnectionService/ListConnection',
-        request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
-        response_deserializer=connectionService__pb2.ConnectionList.FromString,
-        )
+        Args:
+            channel: A grpc.Channel.
+        """
+        self.CreateConnection = channel.unary_unary(
+                '/connection.ConnectionService/CreateConnection',
+                request_serializer=connectionService__pb2.Connection.SerializeToString,
+                response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
+                )
+        self.ListConnection = channel.unary_unary(
+                '/connection.ConnectionService/ListConnection',
+                request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
+                response_deserializer=connectionService__pb2.ConnectionList.FromString,
+                )
 
 
 class ConnectionServiceServicer(object):
-  # missing associated documentation comment in .proto file
-  pass
+    """Missing associated documentation comment in .proto file."""
 
-  def CreateConnection(self, request, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
+    def CreateConnection(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
 
-  def ListConnection(self, request, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
+    def ListConnection(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
 
 
 def add_ConnectionServiceServicer_to_server(servicer, server):
-  rpc_method_handlers = {
-      'CreateConnection': grpc.unary_unary_rpc_method_handler(
-          servicer.CreateConnection,
-          request_deserializer=connectionService__pb2.Connection.FromString,
-          response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
-      ),
-      'ListConnection': grpc.unary_unary_rpc_method_handler(
-          servicer.ListConnection,
-          request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
-          response_serializer=connectionService__pb2.ConnectionList.SerializeToString,
-      ),
-  }
-  generic_handler = grpc.method_handlers_generic_handler(
-      'connection.ConnectionService', rpc_method_handlers)
-  server.add_generic_rpc_handlers((generic_handler,))
+    rpc_method_handlers = {
+            'CreateConnection': grpc.unary_unary_rpc_method_handler(
+                    servicer.CreateConnection,
+                    request_deserializer=connectionService__pb2.Connection.FromString,
+                    response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
+            ),
+            'ListConnection': grpc.unary_unary_rpc_method_handler(
+                    servicer.ListConnection,
+                    request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
+                    response_serializer=connectionService__pb2.ConnectionList.SerializeToString,
+            ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+            'connection.ConnectionService', rpc_method_handlers)
+    server.add_generic_rpc_handlers((generic_handler,))
+
+
+ # This class is part of an EXPERIMENTAL API.
+class ConnectionService(object):
+    """Missing associated documentation comment in .proto file."""
+
+    @staticmethod
+    def CreateConnection(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/connection.ConnectionService/CreateConnection',
+            connectionService__pb2.Connection.SerializeToString,
+            google_dot_protobuf_dot_empty__pb2.Empty.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def ListConnection(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/connection.ConnectionService/ListConnection',
+            google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
+            connectionService__pb2.ConnectionList.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/hackfest/grpc/connectionServiceWithNotif/connectionServiceWithNotif_pb2.py b/hackfest/grpc/connectionServiceWithNotif/connectionServiceWithNotif_pb2.py
index 403dd0ce409700875e8fc80b011564d055c5c4cb..f6ce23ef00c01aab9463e122198a91bd66051100 100644
--- a/hackfest/grpc/connectionServiceWithNotif/connectionServiceWithNotif_pb2.py
+++ b/hackfest/grpc/connectionServiceWithNotif/connectionServiceWithNotif_pb2.py
@@ -1,9 +1,9 @@
+# -*- coding: utf-8 -*-
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: connectionServiceWithNotif.proto
-
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+"""Generated protocol buffer code."""
 from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
 from google.protobuf import message as _message
 from google.protobuf import reflection as _reflection
 from google.protobuf import symbol_database as _symbol_database
@@ -15,245 +15,47 @@ _sym_db = _symbol_database.Default()
 from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
 
 
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='connectionServiceWithNotif.proto',
-  package='connection',
-  syntax='proto3',
-  serialized_options=None,
-  serialized_pb=_b('\n connectionServiceWithNotif.proto\x12\nconnection\x1a\x1bgoogle/protobuf/empty.proto\"\x14\n\x03\x42\x65r\x12\r\n\x05value\x18\x01 \x01(\x01\"\xf5\x01\n\nConnection\x12\x14\n\x0c\x63onnectionId\x18\x01 \x01(\t\x12\x12\n\nsourceNode\x18\x02 \x01(\t\x12\x12\n\ntargetNode\x18\x03 \x01(\t\x12\x12\n\nsourcePort\x18\x04 \x01(\t\x12\x12\n\ntargetPort\x18\x05 \x01(\t\x12\x11\n\tbandwidth\x18\x06 \x01(\r\x12\x43\n\x11layerProtocolName\x18\x07 \x01(\x0e\x32(.connection.Connection.LayerProtocolName\")\n\x11LayerProtocolName\x12\x07\n\x03\x45TH\x10\x00\x12\x0b\n\x07OPTICAL\x10\x01\"<\n\x0e\x43onnectionList\x12*\n\nconnection\x18\x01 \x03(\x0b\x32\x16.connection.Connection2\xe1\x01\n\x1a\x43onnectionServiceWithNotif\x12\x44\n\x10\x43reateConnection\x12\x16.connection.Connection\x1a\x16.google.protobuf.Empty\"\x00\x12\x46\n\x0eListConnection\x12\x16.google.protobuf.Empty\x1a\x1a.connection.ConnectionList\"\x00\x12\x35\n\x06GetBer\x12\x16.connection.Connection\x1a\x0f.connection.Ber\"\x00\x30\x01\x62\x06proto3')
-  ,
-  dependencies=[google_dot_protobuf_dot_empty__pb2.DESCRIPTOR,])
-
-
-
-_CONNECTION_LAYERPROTOCOLNAME = _descriptor.EnumDescriptor(
-  name='LayerProtocolName',
-  full_name='connection.Connection.LayerProtocolName',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='ETH', index=0, number=0,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='OPTICAL', index=1, number=1,
-      serialized_options=None,
-      type=None),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=304,
-  serialized_end=345,
-)
-_sym_db.RegisterEnumDescriptor(_CONNECTION_LAYERPROTOCOLNAME)
-
-
-_BER = _descriptor.Descriptor(
-  name='Ber',
-  full_name='connection.Ber',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='value', full_name='connection.Ber.value', index=0,
-      number=1, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=77,
-  serialized_end=97,
-)
-
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n connectionServiceWithNotif.proto\x12\nconnection\x1a\x1bgoogle/protobuf/empty.proto\"\x14\n\x03\x42\x65r\x12\r\n\x05value\x18\x01 \x01(\x01\"\xf5\x01\n\nConnection\x12\x14\n\x0c\x63onnectionId\x18\x01 \x01(\t\x12\x12\n\nsourceNode\x18\x02 \x01(\t\x12\x12\n\ntargetNode\x18\x03 \x01(\t\x12\x12\n\nsourcePort\x18\x04 \x01(\t\x12\x12\n\ntargetPort\x18\x05 \x01(\t\x12\x11\n\tbandwidth\x18\x06 \x01(\r\x12\x43\n\x11layerProtocolName\x18\x07 \x01(\x0e\x32(.connection.Connection.LayerProtocolName\")\n\x11LayerProtocolName\x12\x07\n\x03\x45TH\x10\x00\x12\x0b\n\x07OPTICAL\x10\x01\"<\n\x0e\x43onnectionList\x12*\n\nconnection\x18\x01 \x03(\x0b\x32\x16.connection.Connection2\xe1\x01\n\x1a\x43onnectionServiceWithNotif\x12\x44\n\x10\x43reateConnection\x12\x16.connection.Connection\x1a\x16.google.protobuf.Empty\"\x00\x12\x46\n\x0eListConnection\x12\x16.google.protobuf.Empty\x1a\x1a.connection.ConnectionList\"\x00\x12\x35\n\x06GetBer\x12\x16.connection.Connection\x1a\x0f.connection.Ber\"\x00\x30\x01\x62\x06proto3')
 
-_CONNECTION = _descriptor.Descriptor(
-  name='Connection',
-  full_name='connection.Connection',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connectionId', full_name='connection.Connection.connectionId', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='sourceNode', full_name='connection.Connection.sourceNode', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='targetNode', full_name='connection.Connection.targetNode', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='sourcePort', full_name='connection.Connection.sourcePort', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='targetPort', full_name='connection.Connection.targetPort', index=4,
-      number=5, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='bandwidth', full_name='connection.Connection.bandwidth', index=5,
-      number=6, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='layerProtocolName', full_name='connection.Connection.layerProtocolName', index=6,
-      number=7, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-    _CONNECTION_LAYERPROTOCOLNAME,
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=100,
-  serialized_end=345,
-)
 
 
-_CONNECTIONLIST = _descriptor.Descriptor(
-  name='ConnectionList',
-  full_name='connection.ConnectionList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connection', full_name='connection.ConnectionList.connection', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=347,
-  serialized_end=407,
-)
-
-_CONNECTION.fields_by_name['layerProtocolName'].enum_type = _CONNECTION_LAYERPROTOCOLNAME
-_CONNECTION_LAYERPROTOCOLNAME.containing_type = _CONNECTION
-_CONNECTIONLIST.fields_by_name['connection'].message_type = _CONNECTION
-DESCRIPTOR.message_types_by_name['Ber'] = _BER
-DESCRIPTOR.message_types_by_name['Connection'] = _CONNECTION
-DESCRIPTOR.message_types_by_name['ConnectionList'] = _CONNECTIONLIST
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-Ber = _reflection.GeneratedProtocolMessageType('Ber', (_message.Message,), dict(
-  DESCRIPTOR = _BER,
-  __module__ = 'connectionServiceWithNotif_pb2'
+_BER = DESCRIPTOR.message_types_by_name['Ber']
+_CONNECTION = DESCRIPTOR.message_types_by_name['Connection']
+_CONNECTIONLIST = DESCRIPTOR.message_types_by_name['ConnectionList']
+_CONNECTION_LAYERPROTOCOLNAME = _CONNECTION.enum_types_by_name['LayerProtocolName']
+Ber = _reflection.GeneratedProtocolMessageType('Ber', (_message.Message,), {
+  'DESCRIPTOR' : _BER,
+  '__module__' : 'connectionServiceWithNotif_pb2'
   # @@protoc_insertion_point(class_scope:connection.Ber)
-  ))
+  })
 _sym_db.RegisterMessage(Ber)
 
-Connection = _reflection.GeneratedProtocolMessageType('Connection', (_message.Message,), dict(
-  DESCRIPTOR = _CONNECTION,
-  __module__ = 'connectionServiceWithNotif_pb2'
+Connection = _reflection.GeneratedProtocolMessageType('Connection', (_message.Message,), {
+  'DESCRIPTOR' : _CONNECTION,
+  '__module__' : 'connectionServiceWithNotif_pb2'
   # @@protoc_insertion_point(class_scope:connection.Connection)
-  ))
+  })
 _sym_db.RegisterMessage(Connection)
 
-ConnectionList = _reflection.GeneratedProtocolMessageType('ConnectionList', (_message.Message,), dict(
-  DESCRIPTOR = _CONNECTIONLIST,
-  __module__ = 'connectionServiceWithNotif_pb2'
+ConnectionList = _reflection.GeneratedProtocolMessageType('ConnectionList', (_message.Message,), {
+  'DESCRIPTOR' : _CONNECTIONLIST,
+  '__module__' : 'connectionServiceWithNotif_pb2'
   # @@protoc_insertion_point(class_scope:connection.ConnectionList)
-  ))
+  })
 _sym_db.RegisterMessage(ConnectionList)
 
-
-
-_CONNECTIONSERVICEWITHNOTIF = _descriptor.ServiceDescriptor(
-  name='ConnectionServiceWithNotif',
-  full_name='connection.ConnectionServiceWithNotif',
-  file=DESCRIPTOR,
-  index=0,
-  serialized_options=None,
-  serialized_start=410,
-  serialized_end=635,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='CreateConnection',
-    full_name='connection.ConnectionServiceWithNotif.CreateConnection',
-    index=0,
-    containing_service=None,
-    input_type=_CONNECTION,
-    output_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
-    serialized_options=None,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListConnection',
-    full_name='connection.ConnectionServiceWithNotif.ListConnection',
-    index=1,
-    containing_service=None,
-    input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
-    output_type=_CONNECTIONLIST,
-    serialized_options=None,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetBer',
-    full_name='connection.ConnectionServiceWithNotif.GetBer',
-    index=2,
-    containing_service=None,
-    input_type=_CONNECTION,
-    output_type=_BER,
-    serialized_options=None,
-  ),
-])
-_sym_db.RegisterServiceDescriptor(_CONNECTIONSERVICEWITHNOTIF)
-
-DESCRIPTOR.services_by_name['ConnectionServiceWithNotif'] = _CONNECTIONSERVICEWITHNOTIF
-
+_CONNECTIONSERVICEWITHNOTIF = DESCRIPTOR.services_by_name['ConnectionServiceWithNotif']
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  _BER._serialized_start=77
+  _BER._serialized_end=97
+  _CONNECTION._serialized_start=100
+  _CONNECTION._serialized_end=345
+  _CONNECTION_LAYERPROTOCOLNAME._serialized_start=304
+  _CONNECTION_LAYERPROTOCOLNAME._serialized_end=345
+  _CONNECTIONLIST._serialized_start=347
+  _CONNECTIONLIST._serialized_end=407
+  _CONNECTIONSERVICEWITHNOTIF._serialized_start=410
+  _CONNECTIONSERVICEWITHNOTIF._serialized_end=635
 # @@protoc_insertion_point(module_scope)
diff --git a/hackfest/grpc/connectionServiceWithNotif/connectionServiceWithNotif_pb2_grpc.py b/hackfest/grpc/connectionServiceWithNotif/connectionServiceWithNotif_pb2_grpc.py
index 9a88a22b4bd9055f1d2e905abaa2496faadb5533..9a5a844c8d10e0fa9087d97050c1bc92de8a868d 100644
--- a/hackfest/grpc/connectionServiceWithNotif/connectionServiceWithNotif_pb2_grpc.py
+++ b/hackfest/grpc/connectionServiceWithNotif/connectionServiceWithNotif_pb2_grpc.py
@@ -1,4 +1,5 @@
 # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
 import grpc
 
 import connectionServiceWithNotif_pb2 as connectionServiceWithNotif__pb2
@@ -6,76 +7,127 @@ from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
 
 
 class ConnectionServiceWithNotifStub(object):
-  # missing associated documentation comment in .proto file
-  pass
-
-  def __init__(self, channel):
-    """Constructor.
-
-    Args:
-      channel: A grpc.Channel.
-    """
-    self.CreateConnection = channel.unary_unary(
-        '/connection.ConnectionServiceWithNotif/CreateConnection',
-        request_serializer=connectionServiceWithNotif__pb2.Connection.SerializeToString,
-        response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
-        )
-    self.ListConnection = channel.unary_unary(
-        '/connection.ConnectionServiceWithNotif/ListConnection',
-        request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
-        response_deserializer=connectionServiceWithNotif__pb2.ConnectionList.FromString,
-        )
-    self.GetBer = channel.unary_stream(
-        '/connection.ConnectionServiceWithNotif/GetBer',
-        request_serializer=connectionServiceWithNotif__pb2.Connection.SerializeToString,
-        response_deserializer=connectionServiceWithNotif__pb2.Ber.FromString,
-        )
+    """Missing associated documentation comment in .proto file."""
+
+    def __init__(self, channel):
+        """Constructor.
+
+        Args:
+            channel: A grpc.Channel.
+        """
+        self.CreateConnection = channel.unary_unary(
+                '/connection.ConnectionServiceWithNotif/CreateConnection',
+                request_serializer=connectionServiceWithNotif__pb2.Connection.SerializeToString,
+                response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
+                )
+        self.ListConnection = channel.unary_unary(
+                '/connection.ConnectionServiceWithNotif/ListConnection',
+                request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
+                response_deserializer=connectionServiceWithNotif__pb2.ConnectionList.FromString,
+                )
+        self.GetBer = channel.unary_stream(
+                '/connection.ConnectionServiceWithNotif/GetBer',
+                request_serializer=connectionServiceWithNotif__pb2.Connection.SerializeToString,
+                response_deserializer=connectionServiceWithNotif__pb2.Ber.FromString,
+                )
 
 
 class ConnectionServiceWithNotifServicer(object):
-  # missing associated documentation comment in .proto file
-  pass
-
-  def CreateConnection(self, request, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
-
-  def ListConnection(self, request, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
-
-  def GetBer(self, request, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
+    """Missing associated documentation comment in .proto file."""
+
+    def CreateConnection(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def ListConnection(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def GetBer(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
 
 
 def add_ConnectionServiceWithNotifServicer_to_server(servicer, server):
-  rpc_method_handlers = {
-      'CreateConnection': grpc.unary_unary_rpc_method_handler(
-          servicer.CreateConnection,
-          request_deserializer=connectionServiceWithNotif__pb2.Connection.FromString,
-          response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
-      ),
-      'ListConnection': grpc.unary_unary_rpc_method_handler(
-          servicer.ListConnection,
-          request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
-          response_serializer=connectionServiceWithNotif__pb2.ConnectionList.SerializeToString,
-      ),
-      'GetBer': grpc.unary_stream_rpc_method_handler(
-          servicer.GetBer,
-          request_deserializer=connectionServiceWithNotif__pb2.Connection.FromString,
-          response_serializer=connectionServiceWithNotif__pb2.Ber.SerializeToString,
-      ),
-  }
-  generic_handler = grpc.method_handlers_generic_handler(
-      'connection.ConnectionServiceWithNotif', rpc_method_handlers)
-  server.add_generic_rpc_handlers((generic_handler,))
+    rpc_method_handlers = {
+            'CreateConnection': grpc.unary_unary_rpc_method_handler(
+                    servicer.CreateConnection,
+                    request_deserializer=connectionServiceWithNotif__pb2.Connection.FromString,
+                    response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
+            ),
+            'ListConnection': grpc.unary_unary_rpc_method_handler(
+                    servicer.ListConnection,
+                    request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
+                    response_serializer=connectionServiceWithNotif__pb2.ConnectionList.SerializeToString,
+            ),
+            'GetBer': grpc.unary_stream_rpc_method_handler(
+                    servicer.GetBer,
+                    request_deserializer=connectionServiceWithNotif__pb2.Connection.FromString,
+                    response_serializer=connectionServiceWithNotif__pb2.Ber.SerializeToString,
+            ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+            'connection.ConnectionServiceWithNotif', rpc_method_handlers)
+    server.add_generic_rpc_handlers((generic_handler,))
+
+
+ # This class is part of an EXPERIMENTAL API.
+class ConnectionServiceWithNotif(object):
+    """Missing associated documentation comment in .proto file."""
+
+    @staticmethod
+    def CreateConnection(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/connection.ConnectionServiceWithNotif/CreateConnection',
+            connectionServiceWithNotif__pb2.Connection.SerializeToString,
+            google_dot_protobuf_dot_empty__pb2.Empty.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def ListConnection(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/connection.ConnectionServiceWithNotif/ListConnection',
+            google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
+            connectionServiceWithNotif__pb2.ConnectionList.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def GetBer(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_stream(request, target, '/connection.ConnectionServiceWithNotif/GetBer',
+            connectionServiceWithNotif__pb2.Connection.SerializeToString,
+            connectionServiceWithNotif__pb2.Ber.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/hackfest/tfs-descriptors/context-topology.json b/hackfest/tfs-descriptors/context-topology.json
index 36b3c44fd61fdec9d208a82a11d5a16c3671d004..afc2cc258889b445cb8d5f21b7e5fddac6a56db1 100644
--- a/hackfest/tfs-descriptors/context-topology.json
+++ b/hackfest/tfs-descriptors/context-topology.json
@@ -1,19 +1,13 @@
 {
     "contexts": [
-        {
-            "context_id": {"context_uuid": {"uuid": "admin"}},
-            "topology_ids": [],
-            "service_ids": []
-        }
+        {"context_id": {"context_uuid": {"uuid": "admin"}}}
     ],
     "topologies": [
         {
             "topology_id": {
                 "context_id": {"context_uuid": {"uuid": "admin"}},
                 "topology_uuid": {"uuid": "admin"}
-            },
-            "device_ids": [],
-            "link_ids": []
+            }
         }
     ]
 }
diff --git a/hackfest/tfs-descriptors/device-all.json b/hackfest/tfs-descriptors/device-all.json
index 36a93fe98d253dbc5e6db7f91b3b890e529c2ffc..0c5fb7e56ce3552c7d196b32b1a8b4dc62a3c0e4 100644
--- a/hackfest/tfs-descriptors/device-all.json
+++ b/hackfest/tfs-descriptors/device-all.json
@@ -4,7 +4,7 @@
             "device_id": {"device_uuid": {"uuid": "R1"}},
             "device_type": "packet-router",
             "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.15"}},
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
                 {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8301"}},
                 {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
                     "username": "admin", "password": "admin",
@@ -21,7 +21,7 @@
             "device_id": {"device_uuid": {"uuid": "R2"}},
             "device_type": "packet-router",
             "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.15"}},
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
                 {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8302"}},
                 {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
                     "username": "admin", "password": "admin",
@@ -38,7 +38,7 @@
             "device_id": {"device_uuid": {"uuid": "R3"}},
             "device_type": "packet-router",
             "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.15"}},
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
                 {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8303"}},
                 {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
                     "username": "admin", "password": "admin",
@@ -55,7 +55,7 @@
             "device_id": {"device_uuid": {"uuid": "R4"}},
             "device_type": "packet-router",
             "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.15"}},
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
                 {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8304"}},
                 {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
                     "username": "admin", "password": "admin",
@@ -72,7 +72,7 @@
             "device_id": {"device_uuid": {"uuid": "OLS"}},
             "device_type": "open-line-system",
             "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.15"}},
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
                 {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8080"}},
                 {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"timeout": 120}}}
             ]},
diff --git a/install_requirements.sh b/install_requirements.sh
index f2013d275e95feb59235837dd166330288aac458..213edef5af3f6efc75b060f12972926aee2e5c5c 100755
--- a/install_requirements.sh
+++ b/install_requirements.sh
@@ -20,7 +20,7 @@
 #   dlt                 : under design
 #   pathcomp            : under design
 ALL_COMPONENTS="context device service compute monitoring webui interdomain slice"
-ALL_COMPONENTS="${ALL_COMPONENTS} dbscanserving opticalattackmitigator opticalcentralizedattackdetector"
+ALL_COMPONENTS="${ALL_COMPONENTS} dbscanserving opticalattackmitigator opticalattackdetector"
 ALL_COMPONENTS="${ALL_COMPONENTS} l3_attackmitigator l3_centralizedattackdetector l3_distributedattackdetector"
 TFS_COMPONENTS=${TFS_COMPONENTS:-$ALL_COMPONENTS}
 
diff --git a/manifests/automationservice.yaml b/manifests/automationservice.yaml
index 73e6b1d7be076dbcf55014ae3accbc1e29e0c8e8..f4a4def176cd2b9f89d7ee4f10c0af48a08b9733 100644
--- a/manifests/automationservice.yaml
+++ b/manifests/automationservice.yaml
@@ -102,7 +102,7 @@ spec:
               cpu: 50m
               memory: 512Mi
             limits:
-              cpu: 500m
+              cpu: 2000m
               memory: 2048Mi
 ---
 apiVersion: autoscaling/v2
diff --git a/manifests/policyservice.yaml b/manifests/policyservice.yaml
index 72da09ecaf1de9d080d686c63c0f18c88f09e8b4..b34331724665e4788d2de327bb5160eb370fed96 100644
--- a/manifests/policyservice.yaml
+++ b/manifests/policyservice.yaml
@@ -106,7 +106,7 @@ spec:
               cpu: 50m
               memory: 512Mi
             limits:
-              cpu: 500m
+              cpu: 2000m
               memory: 2048Mi
 ---
 apiVersion: autoscaling/v2
@@ -126,4 +126,4 @@ spec:
       name: cpu
       target:
         type: Utilization
-        averageUtilization: 80
\ No newline at end of file
+        averageUtilization: 80
diff --git a/proto/policy_action.proto b/proto/policy_action.proto
index 17dd721196c0ed407849aa23099477ea34d39ddd..d547e97790cf2cafe2e4cb9ec8c8b06d8a2e0404 100644
--- a/proto/policy_action.proto
+++ b/proto/policy_action.proto
@@ -26,6 +26,8 @@ enum PolicyRuleActionEnum {
   POLICYRULE_ACTION_SET_DEVICE_STATUS = 1;
   POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE = 2;
   POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT = 3;
+  POLICY_RULE_ACTION_CALL_SERVICE_RPC = 4;
+  POLICY_RULE_ACTION_RECALCULATE_PATH = 5;
 }
 
 // Action configuration
@@ -37,4 +39,4 @@ message PolicyRuleActionConfig {
 // message PolicyRuleAction {
 //   PolicyRuleActionEnum action = 1;
 //   repeated string parameters = 2;
-// }
\ No newline at end of file
+// }
diff --git a/src/common/Settings.py b/src/common/Settings.py
index 1efe80db72cc47ba26a32241cc0bf9c15e866176..5d6fba2fdca0530851fabdc06954976b29f2f2b4 100644
--- a/src/common/Settings.py
+++ b/src/common/Settings.py
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 import logging, os, time
-from typing import List
+from typing import Dict, List
 from common.Constants import (
     DEFAULT_GRPC_BIND_ADDRESS, DEFAULT_GRPC_GRACE_PERIOD, DEFAULT_GRPC_MAX_WORKERS, DEFAULT_HTTP_BIND_ADDRESS,
     DEFAULT_LOG_LEVEL, DEFAULT_METRICS_PORT, DEFAULT_SERVICE_GRPC_PORTS, DEFAULT_SERVICE_HTTP_BASEURLS,
@@ -37,23 +37,24 @@ ENVVAR_SUFIX_SERVICE_HOST         = 'SERVICE_HOST'
 ENVVAR_SUFIX_SERVICE_PORT_GRPC    = 'SERVICE_PORT_GRPC'
 ENVVAR_SUFIX_SERVICE_PORT_HTTP    = 'SERVICE_PORT_HTTP'
 
-def find_missing_environment_variables(
-    required_environment_variables : List[str] = []
-) -> List[str]:
-    if ENVVAR_KUBERNETES_PORT in os.environ:
-        missing_variables = set(required_environment_variables).difference(set(os.environ.keys()))
-    else:
-        # We're not running in Kubernetes, nothing to wait for
-        missing_variables = required_environment_variables
-    return missing_variables
+def find_environment_variables(
+    environment_variable_names : List[str] = []
+) -> Dict[str, str]:
+    environment_variable : Dict[str, str] = dict()
+    for name in environment_variable_names:
+        if name not in os.environ: continue
+        environment_variable[name] = os.environ[name]
+    return environment_variable
 
 def wait_for_environment_variables(
     required_environment_variables : List[str] = [], wait_delay_seconds : float = DEFAULT_RESTART_DELAY
-):
-    missing_variables = find_missing_environment_variables(required_environment_variables)
-    if len(missing_variables) == 0: return # We have all environment variables defined
-    msg = 'Variables({:s}) are missing in Environment({:s}), restarting in {:f} seconds...'
-    LOGGER.error(msg.format(str(missing_variables), str(os.environ), wait_delay_seconds))
+) -> None:
+    if ENVVAR_KUBERNETES_PORT not in os.environ: return # Not running in Kubernetes
+    found = find_environment_variables(required_environment_variables)
+    missing = set(required_environment_variables).difference(set(found.keys()))
+    if len(missing) == 0: return # We have all environment variables defined
+    MSG = 'Variables({:s}) are missing in Environment({:s}), restarting in {:f} seconds...'
+    LOGGER.error(MSG.format(str(missing), str(os.environ), wait_delay_seconds))
     time.sleep(wait_delay_seconds)
     raise Exception('Restarting...') # pylint: disable=broad-exception-raised
 
diff --git a/src/dlt/connector/client/DltEventsCollector.py b/src/dlt/connector/client/DltEventsCollector.py
index 9f929d7ccf4a8f54c6f87304ec05bb9086f8522c..f35d5c7cca91c89cc8fdb0f254a1927e7d76486c 100644
--- a/src/dlt/connector/client/DltEventsCollector.py
+++ b/src/dlt/connector/client/DltEventsCollector.py
@@ -12,27 +12,40 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+from typing import Callable, Optional
 import grpc, logging, queue, threading, time
-from common.proto.dlt_gateway_pb2 import DltRecordSubscription
+from common.proto.dlt_gateway_pb2 import DltRecordEvent, DltRecordSubscription
 from common.tools.grpc.Tools import grpc_message_to_json_string
 from dlt.connector.client.DltGatewayClient import DltGatewayClient
 
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
 
+# This class accepts an event_handler method as attribute that can be used to pre-process and
+# filter events before they reach the events_queue. Depending on the handler, the supported
+# behaviors are:
+# - If the handler is not set, the events are transparently added to the events_queue.
+# - If returns None for an event, the event is not stored in the events_queue.
+# - If returns a DltRecordEvent object for an event, the returned event is stored in the events_queue.
+# - Other combinations are not supported.
+
 class DltEventsCollector(threading.Thread):
     def __init__(
         self, dltgateway_client : DltGatewayClient,
         log_events_received     : bool = False,
+        event_handler           : Optional[Callable[[DltRecordEvent], Optional[DltRecordEvent]]] = None,
     ) -> None:
         super().__init__(name='DltEventsCollector', daemon=True)
         self._dltgateway_client = dltgateway_client
         self._log_events_received = log_events_received
+        self._event_handler = event_handler
         self._events_queue = queue.Queue()
         self._terminate = threading.Event()
         self._dltgateway_stream = None
 
     def run(self) -> None:
+        event_handler = self._event_handler
+        if event_handler is None: event_handler = lambda e: e
         self._terminate.clear()
         while not self._terminate.is_set():
             try:
@@ -41,6 +54,11 @@ class DltEventsCollector(threading.Thread):
                 for event in self._dltgateway_stream:
                     if self._log_events_received:
                         LOGGER.info('[_collect] event: {:s}'.format(grpc_message_to_json_string(event)))
+                    event = event_handler(event)
+                    if event is None: continue
+                    if not isinstance(event, DltRecordEvent):
+                        # pylint: disable=broad-exception-raised
+                        raise Exception('Unsupported return type: {:s}'.format(str(event)))
                     self._events_queue.put_nowait(event)
             except grpc.RpcError as e:
                 if e.code() == grpc.StatusCode.UNAVAILABLE: # pylint: disable=no-member
diff --git a/src/dlt/connector/main_test.py b/src/dlt/connector/tests/basic.py
similarity index 94%
rename from src/dlt/connector/main_test.py
rename to src/dlt/connector/tests/basic.py
index 679be72870cf84b790553e2d43ed9961a1d66379..cc832cdc88475b862c841a6037d229b7675f283a 100644
--- a/src/dlt/connector/main_test.py
+++ b/src/dlt/connector/tests/basic.py
@@ -14,7 +14,7 @@
 
 # pip install grpcio==1.47.0 grpcio-tools==1.47.0 protobuf==3.20.1
 # PYTHONPATH=./src python
-# PYTHONPATH=/home/cttc/teraflow/src python -m dlt.connector.main_test
+# PYTHONPATH=/home/cttc/teraflow/src python -m dlt.connector.tests.basic
 
 import logging, sys, time
 from common.proto.dlt_gateway_pb2 import (
@@ -23,8 +23,8 @@ from common.proto.dlt_gateway_pb2 import (
 from common.tools.object_factory.Device import json_device
 from common.tools.grpc.Tools import grpc_message_to_json_string
 from src.common.proto.context_pb2 import DEVICEOPERATIONALSTATUS_ENABLED, Device
-from .client.DltGatewayClient import DltGatewayClient
-from .client.DltEventsCollector import DltEventsCollector
+from ..client.DltGatewayClient import DltGatewayClient
+from ..client.DltEventsCollector import DltEventsCollector
 
 logging.basicConfig(level=logging.INFO)
 LOGGER = logging.getLogger(__name__)
diff --git a/src/dlt/performance/README.md b/src/dlt/performance/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..5c2c6d6bcb086a7f53583156ad4b9947f0aacd36
--- /dev/null
+++ b/src/dlt/performance/README.md
@@ -0,0 +1,42 @@
+# DLT Gateway+Blockchain Performance Assessment Test
+
+This test assesses the performance of the DLT component's Gateway + HyperLedger Fabric Blockchain.
+
+To carry on that, it first creates a number of random devices, links, services, and slices.
+Then, it performs some random creations, retrievals, updates, and deletes of random devices, links,
+services, and slices.
+
+For each operation and record type, the size of the entities in bytes, the number of endpoints,
+constraints, config rules, subservices, and subslices is recorded.
+Besides, it is recorded also the time to store/retrieve the records in the blockchain, and the delay
+between the change and the reception of the asynchronous notification event.
+
+## Scenario prepararion:
+Create a docker virtual network:
+
+```(bash)
+docker network rm tfs-br
+docker network create -d bridge --subnet=172.254.254.0/24 --gateway=172.254.254.1 --ip-range=172.254.254.0/24 tfs-br
+```
+
+Build the DLT Gateway component's Docker image:
+```(bash)
+docker build -t dlt-gateway:test -f ./src/dlt/gateway/Dockerfile .
+```
+
+Start the DLT Gateway component:
+```(bash)
+docker run --name dlt-gateway -d -p 50051:50051 --network=tfs-br dlt-gateway:test
+```
+
+Install possibly missing requirements:
+```(bash)
+pip install grpcio==1.47.0 grpcio-tools==1.47.0 protobuf==3.20.1
+```
+
+Start the performance assessment:
+```(bash)
+PYTHONPATH=./src python -m dlt.performance
+```
+
+The test produces a CSV file with the results per operation.
diff --git a/src/dlt/performance/__init__.py b/src/dlt/performance/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..38d04994fb0fa1951fb465bc127eb72659dc2eaf
--- /dev/null
+++ b/src/dlt/performance/__init__.py
@@ -0,0 +1,13 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/src/dlt/performance/__main__.py b/src/dlt/performance/__main__.py
new file mode 100644
index 0000000000000000000000000000000000000000..ee3b1abf07aa8fd891a19c07c1905dba5259c5a9
--- /dev/null
+++ b/src/dlt/performance/__main__.py
@@ -0,0 +1,116 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+import functools, logging, pathlib, sys, time
+from common.proto.dlt_gateway_pb2 import DltRecordEvent
+from dlt.connector.client.DltGatewayClient import DltGatewayClient
+from dlt.connector.client.DltEventsCollector import DltEventsCollector
+from .play_ground.Enums import CONTEXT_EVENT_TYPE_TO_ACTION, RECORD_TYPE_TO_ENUM
+from .play_ground import PlayGround
+
+DLT_GATEWAY_HOST     = '172.254.254.2'
+DLT_GATEWAY_PORT     = 50051
+
+NUM_INITIAL_DEVICES  = 20
+NUM_INITIAL_LINKS    = 20
+NUM_INITIAL_SERVICES = 20
+NUM_INITIAL_SLICES   = 20
+
+NUM_ACTIONS          = 1000
+REPORT_EVERY         = 5
+DELAY_FOR_EVENTS     = 5
+DOMAIN_UUID          = 'perf-test-fake-domain'
+
+OUTPUT_FOLDER        = 'data/perf/scenario_2/dlt/2023-05May-31'
+CSV_FILEPATH         = OUTPUT_FOLDER + '/response_time.csv'
+
+LOG_FORMAT = "[%(asctime)s] %(levelname)s:%(name)s:%(message)s"
+logging.basicConfig(level=logging.INFO, format=LOG_FORMAT)
+LOGGER = logging.getLogger(__name__)
+
+def _event_handler(play_ground : PlayGround, event : DltRecordEvent) -> None:
+    # Filter undesired/unsupported/wrong domain_uuids, actions, and record types
+    # Update notification time in PlayGround.PerfPoints
+    # Return None to prevent storing the events in the DLT Events' Collector internal queue
+
+    domain_uuid = event.record_id.domain_uuid.uuid
+    if domain_uuid != DOMAIN_UUID: return None
+
+    action = CONTEXT_EVENT_TYPE_TO_ACTION.get(event.event.event_type)
+    if action is None: return None
+
+    record_type = RECORD_TYPE_TO_ENUM.get(event.record_id.type)
+    if record_type is None: return None
+
+    #event_time = event.event.timestamp.timestamp
+    record_uuid = event.record_id.record_uuid.uuid
+    play_ground.perf_data.add_notif_time(action, record_type, record_uuid, time.time())
+    return None
+
+def main() -> None:
+    dltgateway_client = DltGatewayClient(host=DLT_GATEWAY_HOST, port=DLT_GATEWAY_PORT)
+
+    play_ground = PlayGround(dltgateway_client, DOMAIN_UUID)
+    event_handler = functools.partial(_event_handler, play_ground)
+
+    dltgateway_collector = DltEventsCollector(
+        dltgateway_client, log_events_received=False, event_handler=event_handler)
+    dltgateway_collector.start()
+
+    time.sleep(3)
+
+    LOGGER.info('Adding {:d} initial devices...'.format(NUM_INITIAL_DEVICES))
+    for _ in range(NUM_INITIAL_DEVICES):
+        play_ground.create_device()
+
+    LOGGER.info('Adding {:d} initial links...'.format(NUM_INITIAL_LINKS))
+    for _ in range(NUM_INITIAL_LINKS):
+        play_ground.create_link()
+
+    LOGGER.info('Adding {:d} initial services...'.format(NUM_INITIAL_SERVICES))
+    for _ in range(NUM_INITIAL_SERVICES):
+        play_ground.create_service()
+
+    LOGGER.info('Adding {:d} initial slices...'.format(NUM_INITIAL_SLICES))
+    for _ in range(NUM_INITIAL_SLICES):
+        play_ground.create_slice()
+
+    # Otherwise, only get/update/delete is performed and play_ground becomes empty
+    play_ground.perf_data.clear_operation_counters()
+
+    LOGGER.info('Starting {:d} actions...'.format(NUM_ACTIONS))
+    num_action = 0
+    while num_action < NUM_ACTIONS:
+        if num_action > 0 and num_action % REPORT_EVERY == 0:
+            str_stats = play_ground.perf_data.stats_to_str()
+            MSG = 'Running action {:d}/{:d}...\n{:s}'
+            LOGGER.info(MSG.format(num_action, NUM_ACTIONS, str_stats))
+        completed = play_ground.run_random_operation()
+        if completed: num_action += 1
+
+    str_stats = play_ground.perf_data.stats_to_str()
+    LOGGER.info('Completed {:d} actions!\n{:s}'.format(NUM_ACTIONS, str_stats))
+
+    LOGGER.info('Waiting {:f} for last events...'.format(DELAY_FOR_EVENTS))
+    time.sleep(DELAY_FOR_EVENTS)
+
+    dltgateway_collector.stop()
+
+    LOGGER.info('Writing results...')
+    pathlib.Path(OUTPUT_FOLDER).mkdir(parents=True, exist_ok=True)
+    play_ground.perf_data.to_csv(CSV_FILEPATH)
+    return 0
+
+if __name__ == '__main__':
+    sys.exit(main())
diff --git a/src/dlt/performance/play_ground/Dlt.py b/src/dlt/performance/play_ground/Dlt.py
new file mode 100644
index 0000000000000000000000000000000000000000..968669b7ccfc142e3e82a32e9dd972e558bc6fa3
--- /dev/null
+++ b/src/dlt/performance/play_ground/Dlt.py
@@ -0,0 +1,133 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+import json, time
+from typing import Dict, Union
+from common.proto.context_pb2 import Device, Link, Service, Slice
+from common.proto.dlt_gateway_pb2 import (
+    DltRecord, DltRecordId, DltRecordOperationEnum, DltRecordStatus, DltRecordTypeEnum)
+from common.tools.grpc.Tools import grpc_message_to_json_string
+from dlt.connector.client.DltGatewayClient import DltGatewayClient
+from .PerfPoint import PerfPoint
+
+DLT_OPERATION_CREATE = DltRecordOperationEnum.DLTRECORDOPERATION_ADD
+DLT_OPERATION_UPDATE = DltRecordOperationEnum.DLTRECORDOPERATION_UPDATE
+DLT_OPERATION_DELETE = DltRecordOperationEnum.DLTRECORDOPERATION_DELETE
+
+DLT_RECORD_TYPE_DEVICE  = DltRecordTypeEnum.DLTRECORDTYPE_DEVICE
+DLT_RECORD_TYPE_LINK    = DltRecordTypeEnum.DLTRECORDTYPE_LINK
+DLT_RECORD_TYPE_SERVICE = DltRecordTypeEnum.DLTRECORDTYPE_SERVICE
+DLT_RECORD_TYPE_SLICE   = DltRecordTypeEnum.DLTRECORDTYPE_SLICE
+
+def dlt_record_set(
+    dltgateway_client : DltGatewayClient, perf_point : PerfPoint,
+    operation : DltRecordOperationEnum, domain_uuid : str, objekt : Union[Device, Link, Service, Slice]
+) -> DltRecordStatus:
+    if isinstance(objekt, Device):
+        record_type = DLT_RECORD_TYPE_DEVICE
+        record_uuid = objekt.device_id.device_uuid.uuid
+    elif isinstance(objekt, Link):
+        record_type = DLT_RECORD_TYPE_LINK
+        record_uuid = objekt.link_id.link_uuid.uuid
+    elif isinstance(objekt, Service):
+        record_type = DLT_RECORD_TYPE_SERVICE
+        record_uuid = objekt.service_id.service_uuid.uuid
+    elif isinstance(objekt, Slice):
+        record_type = DLT_RECORD_TYPE_SLICE
+        record_uuid = objekt.slice_id.slice_uuid.uuid
+    else:
+        raise NotImplementedError('Object({:s}) not supported'.format(str(type(objekt))))
+
+    dlt_req = DltRecord()
+    dlt_req.record_id.domain_uuid.uuid = domain_uuid    # pylint: disable=no-member
+    dlt_req.record_id.type             = record_type    # pylint: disable=no-member
+    dlt_req.record_id.record_uuid.uuid = record_uuid    # pylint: disable=no-member
+    dlt_req.operation                  = operation
+    dlt_req.data_json                  = grpc_message_to_json_string(objekt)
+
+    perf_point.set_time_requested(time.time())
+    reply = dltgateway_client.RecordToDlt(dlt_req)
+    perf_point.set_time_replied(time.time())
+
+    perf_point.set_size_bytes(len(dlt_req.data_json))   # pylint: disable=no-member
+    if isinstance(objekt, Device):
+        perf_point.set_num_config_rules(len(objekt.device_config.config_rules))
+        perf_point.set_num_endpoints(len(objekt.device_endpoints))
+    elif isinstance(objekt, Link):
+        perf_point.set_num_endpoints(len(objekt.link_endpoint_ids))
+    elif isinstance(objekt, Service):
+        perf_point.set_num_config_rules(len(objekt.service_config.config_rules))
+        perf_point.set_num_constraints(len(objekt.service_constraints))
+        perf_point.set_num_endpoints(len(objekt.service_endpoint_ids))
+    elif isinstance(objekt, Slice):
+        perf_point.set_num_config_rules(len(objekt.slice_config.config_rules))
+        perf_point.set_num_constraints(len(objekt.slice_constraints))
+        perf_point.set_num_endpoints(len(objekt.slice_endpoint_ids))
+        perf_point.set_num_sub_services(len(objekt.slice_service_ids))
+        perf_point.set_num_sub_slices(len(objekt.slice_subslice_ids))
+    else:
+        raise NotImplementedError('Object({:s}) not supported'.format(str(type(objekt))))
+
+    return reply
+
+def dlt_record_found(record : DltRecord) -> bool:
+    return all([
+        len(record.record_id.domain_uuid.uuid) > 0,
+        record.record_id.type != DltRecordTypeEnum.DLTRECORDTYPE_UNDEFINED,
+        len(record.record_id.record_uuid.uuid) > 0,
+        #record.operation != DltRecordOperationEnum.DLTRECORDOPERATION_UNDEFINED,
+        len(record.data_json) > 0,
+    ])
+
+def dlt_record_get(
+    dltgateway_client : DltGatewayClient, perf_point : PerfPoint,
+    domain_uuid : str, record_type : DltRecordTypeEnum, record_uuid : str
+) -> Dict:
+    dlt_rec_id = DltRecordId()
+    dlt_rec_id.domain_uuid.uuid = domain_uuid   # pylint: disable=no-member
+    dlt_rec_id.type             = record_type
+    dlt_rec_id.record_uuid.uuid = record_uuid   # pylint: disable=no-member
+
+    perf_point.set_time_requested(time.time())
+    dlt_rep = dltgateway_client.GetFromDlt(dlt_rec_id)
+    perf_point.set_time_replied(time.time())
+
+    if not dlt_record_found(dlt_rep):
+        MSG = 'DltRecord({:s}/{:s}/{:s}) not found'
+        str_record_type = DltRecordTypeEnum.Name(record_type)
+        msg = MSG.format(str(domain_uuid), str_record_type, str(record_uuid))
+        raise Exception(msg) # pylint: disable=broad-exception-raised
+
+    data : Dict = json.loads(dlt_rep.data_json)
+
+    perf_point.set_size_bytes(len(dlt_rep.data_json))
+    if 'device_id' in data:
+        perf_point.set_num_config_rules(len(data.get('device_config', {}).get('config_rules')))
+        perf_point.set_num_endpoints(len(data.get('device_endpoints', [])))
+    elif 'link_id' in data:
+        perf_point.set_num_endpoints(len(data.get('link_endpoint_ids', [])))
+    elif 'service_id' in data:
+        perf_point.set_num_config_rules(len(data.get('service_config', []).get('config_rules')))
+        perf_point.set_num_constraints(len(data.get('service_constraints', [])))
+        perf_point.set_num_endpoints(len(data.get('service_endpoint_ids', [])))
+    elif 'slice_id' in data:
+        perf_point.set_num_config_rules(len(data.get('slice_config', []).get('config_rules')))
+        perf_point.set_num_constraints(len(data.get('slice_constraints', [])))
+        perf_point.set_num_endpoints(len(data.get('slice_endpoint_ids', [])))
+        perf_point.set_num_sub_services(len(data.get('slice_service_ids', [])))
+        perf_point.set_num_sub_slices(len(data.get('slice_subslice_ids', [])))
+    else:
+        raise NotImplementedError('Object({:s}) not supported'.format(str(data)))
+
+    return data
diff --git a/src/dlt/performance/play_ground/Enums.py b/src/dlt/performance/play_ground/Enums.py
new file mode 100644
index 0000000000000000000000000000000000000000..1af5bd38dd58c5ab2b260788bfb3c63dc538766d
--- /dev/null
+++ b/src/dlt/performance/play_ground/Enums.py
@@ -0,0 +1,42 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+import enum
+from common.proto.context_pb2 import EventTypeEnum
+from common.proto.dlt_gateway_pb2 import DltRecordTypeEnum
+
+class ActionEnum(enum.Enum):
+    CREATE = 'create'
+    GET    = 'get'
+    UPDATE = 'update'
+    DELETE = 'delete'
+
+class RecordTypeEnum(enum.Enum):
+    DEVICE  = 'device'
+    LINK    = 'link'
+    SERVICE = 'service'
+    SLICE   = 'slice'
+
+CONTEXT_EVENT_TYPE_TO_ACTION = {
+    EventTypeEnum.EVENTTYPE_CREATE : ActionEnum.CREATE,
+    EventTypeEnum.EVENTTYPE_UPDATE : ActionEnum.UPDATE,
+    EventTypeEnum.EVENTTYPE_REMOVE : ActionEnum.DELETE,
+}
+
+RECORD_TYPE_TO_ENUM = {
+    DltRecordTypeEnum.DLTRECORDTYPE_DEVICE  : RecordTypeEnum.DEVICE,
+    DltRecordTypeEnum.DLTRECORDTYPE_LINK    : RecordTypeEnum.LINK,
+    DltRecordTypeEnum.DLTRECORDTYPE_SERVICE : RecordTypeEnum.SERVICE,
+    DltRecordTypeEnum.DLTRECORDTYPE_SLICE   : RecordTypeEnum.SLICE,
+}
diff --git a/src/dlt/performance/play_ground/PerfData.py b/src/dlt/performance/play_ground/PerfData.py
new file mode 100644
index 0000000000000000000000000000000000000000..8846de598e56e2c987b8bc09b5adf294fac4a312
--- /dev/null
+++ b/src/dlt/performance/play_ground/PerfData.py
@@ -0,0 +1,81 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+import csv, prettytable
+from typing import Dict, List, Tuple
+from .Enums import ActionEnum, RecordTypeEnum
+from .PerfPoint import PerfPoint
+
+class PerfData:
+    def __init__(self) -> None:
+        self._total_count : int = 0
+        self._operation_counters : Dict[Tuple[ActionEnum, RecordTypeEnum], int] = dict()
+        self._points : Dict[Tuple[ActionEnum, RecordTypeEnum, str], Tuple[List[PerfPoint], List[float]]] = dict()
+        self.clear_operation_counters()
+
+    @property
+    def operation_counters(self): return self._operation_counters
+
+    def clear_operation_counters(self) -> None:
+        self._points.clear()
+        self._total_count = 0
+        for action in ActionEnum.__members__.values():
+            for record_type in RecordTypeEnum.__members__.values():
+                type_key = (action, record_type)
+                self._operation_counters[type_key] = 0
+
+    def add_point(self, action : ActionEnum, record_type : RecordTypeEnum, record_uuid : str) -> PerfPoint:
+        point = PerfPoint(action, record_type, record_uuid)
+
+        point_key = (action, record_type, record_uuid)
+        self._points.setdefault(point_key, (list(), list()))[0].append(point)
+
+        type_key = (action, record_type)
+        self._operation_counters[type_key] = self._operation_counters.get(type_key, 0) + 1
+        self._total_count += 1
+        return point
+
+    def add_notif_time(
+        self, action : ActionEnum, record_type : RecordTypeEnum, record_uuid : str, notif_time : float
+    ) -> None:
+        point_key = (action, record_type, record_uuid)
+        self._points.setdefault(point_key, (list(), list()))[1].append(notif_time)
+
+    def to_csv(self, filepath : str) -> None:
+        points = []
+        for points_key,(perf_points,notif_times) in self._points.items():
+            if points_key[0] == ActionEnum.GET:
+                points.extend([pp.to_dict() for pp in perf_points])
+            elif len(perf_points) != len(notif_times):
+                points.extend([pp.to_dict() for pp in perf_points])
+            else:
+                for pp,nt in zip(perf_points,notif_times):
+                    pp.set_time_notified(nt)
+                    points.append(pp.to_dict())
+
+        keys = points[0].keys()
+        with open(filepath, 'w', newline='', encoding='UTF-8') as csv_file:
+            dict_writer = csv.DictWriter(csv_file, keys)
+            dict_writer.writeheader()
+            dict_writer.writerows(points)
+
+    def stats_to_str(self) -> str:
+        field_names = ['action', 'record_type', 'count']
+        pt_stats = prettytable.PrettyTable(field_names=field_names, sortby='count', reversesort=True)
+        for f in field_names[0:2]: pt_stats.align[f] = 'l'
+        for f in field_names[2:3]: pt_stats.align[f] = 'r'
+        for (action,record_type),count in self._operation_counters.items():
+            pt_stats.add_row([action.value, record_type.value, count])
+        pt_stats.add_row(['*', '*', self._total_count])
+        return pt_stats.get_string()
diff --git a/src/dlt/performance/play_ground/PerfPoint.py b/src/dlt/performance/play_ground/PerfPoint.py
new file mode 100644
index 0000000000000000000000000000000000000000..1e06057fe58c95a40d6b8330e07913c2ec62a044
--- /dev/null
+++ b/src/dlt/performance/play_ground/PerfPoint.py
@@ -0,0 +1,66 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from typing import Dict, Optional
+from .Enums import ActionEnum, RecordTypeEnum
+
+class PerfPoint:
+    def __init__(self, action : ActionEnum, record_type : RecordTypeEnum, record_uuid : str) -> None:
+        self.action           : ActionEnum      = action
+        self.record_type      : RecordTypeEnum  = record_type
+        self.record_uuid      : str             = record_uuid
+        self.size_bytes       : Optional[int  ] = None
+        self.num_endpoints    : Optional[int  ] = None
+        self.num_config_rules : Optional[int  ] = None
+        self.num_constraints  : Optional[int  ] = None
+        self.num_sub_services : Optional[int  ] = None
+        self.num_sub_slices   : Optional[int  ] = None
+        self.time_requested   : Optional[float] = None
+        self.time_replied     : Optional[float] = None
+        self.time_notified    : Optional[float] = None
+
+    def set_size_bytes      (self, size_bytes       : int) -> None: self.size_bytes       = size_bytes
+    def set_num_endpoints   (self, num_endpoints    : int) -> None: self.num_endpoints    = num_endpoints
+    def set_num_config_rules(self, num_config_rules : int) -> None: self.num_config_rules = num_config_rules
+    def set_num_constraints (self, num_constraints  : int) -> None: self.num_constraints  = num_constraints
+    def set_num_sub_services(self, num_sub_services : int) -> None: self.num_sub_services = num_sub_services
+    def set_num_sub_slices  (self, num_sub_slices   : int) -> None: self.num_sub_slices   = num_sub_slices
+
+    def set_time_requested(self, timestamp : float) -> None: self.time_requested = timestamp
+    def set_time_replied  (self, timestamp : float) -> None: self.time_replied   = timestamp
+    def set_time_notified (self, timestamp : float) -> None: self.time_notified  = timestamp
+
+    def to_dict(self) -> Dict:
+        exec_time, event_delay = None, None
+        if self.time_replied is not None and self.time_requested is not None:
+            exec_time = self.time_replied - self.time_requested
+            if self.time_notified is not None:
+                event_delay = self.time_notified - self.time_requested
+
+        return {
+            'action'          : self.action.value,
+            'record_type'     : self.record_type.value,
+            'record_uuid'     : self.record_uuid,
+            'size_bytes'      : self.size_bytes,
+            'num_endpoints'   : self.num_endpoints,
+            'num_config_rules': self.num_config_rules,
+            'num_constraints' : self.num_constraints,
+            'num_sub_services': self.num_sub_services,
+            'num_sub_slices'  : self.num_sub_slices,
+            'time_requested'  : self.time_requested,
+            'time_replied'    : self.time_replied,
+            'time_notified'   : self.time_notified,
+            'exec_time'       : exec_time,
+            'event_delay'     : event_delay,
+        }
diff --git a/src/dlt/performance/play_ground/Random.py b/src/dlt/performance/play_ground/Random.py
new file mode 100644
index 0000000000000000000000000000000000000000..2c4c1e739f0ced1ad1988fae73bc90b5dd2b1ec6
--- /dev/null
+++ b/src/dlt/performance/play_ground/Random.py
@@ -0,0 +1,182 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+import random, uuid
+from typing import Dict, List, Optional, Set
+from common.proto.context_pb2 import (
+    Device, EndPoint, Link, Service, ServiceStatusEnum, ServiceTypeEnum, Slice, SliceStatusEnum
+)
+from common.tools.grpc.Tools import grpc_message_to_json
+from common.tools.object_factory.ConfigRule import json_config_rule_set
+from common.tools.object_factory.Constraint import json_constraint_custom
+from common.tools.object_factory.Context import json_context_id
+from common.tools.object_factory.Device import (
+    DEVICE_DISABLED, DEVICE_EMU_DRIVERS, DEVICE_EMUPR_TYPE, json_device, json_device_id
+)
+from common.tools.object_factory.EndPoint import json_endpoint, json_endpoint_id
+from common.tools.object_factory.Link import json_link
+from common.tools.object_factory.Service import json_service
+from common.tools.object_factory.Slice import json_slice
+from common.tools.object_factory.Topology import json_topology_id
+from .Settings import (
+    CONFIG_RULES_MIN_ENTRIES, CONFIG_RULES_MAX_ENTRIES, CONSTRAINTS_MIN_ENTRIES, CONSTRAINTS_MAX_ENTRIES,
+    DEVICE_MAX_ENDPOINTS, DEVICE_MIN_ENDPOINTS, DICT_MAX_ENTRIES, DICT_MIN_ENTRIES, PATH_MAX_PARTS, PATH_MIN_PARTS,
+    SLICE_MAX_SUBSERVICES, SLICE_MAX_SUBSLICES, SLICE_MIN_SUBSERVICES, SLICE_MIN_SUBSLICES,
+    WORD_ALPHABET, WORD_MAX_LENGTH, WORD_MIN_LENGTH,
+)
+
+def random_word(length : Optional[int] = None, alphabet : Optional[str] = None) -> str:
+    if alphabet is None: alphabet = WORD_ALPHABET
+    if length is None: length = int(random.uniform(WORD_MIN_LENGTH, WORD_MAX_LENGTH))
+    word = []
+    remaining_length = length
+    while remaining_length > 0:
+        part_length = min(len(alphabet), remaining_length)
+        word.extend(random.sample(alphabet, part_length))
+        remaining_length = length - len(word)
+    return ''.join(word)
+
+def random_path(
+    num_parts : Optional[int] = None, part_length : Optional[int] = None, alphabet : Optional[str] = None,
+    separator : str = '/'
+) -> str:
+    if num_parts is None: num_parts = int(random.uniform(PATH_MIN_PARTS, PATH_MAX_PARTS))
+    return separator.join([random_word(length=part_length, alphabet=alphabet) for _ in range(num_parts)])
+
+def random_dict(
+    num_entries : Optional[int] = None, key_length : Optional[str] = None, value_length : Optional[str] = None
+) -> Dict:
+    if num_entries is None: num_entries = int(random.uniform(DICT_MIN_ENTRIES, DICT_MAX_ENTRIES))
+    return {random_word(length=key_length) : random_word(length=value_length) for _ in range(num_entries)}
+
+def random_config_rule() -> Dict:
+    resource_key = random_path()
+    resource_value = random_dict()
+    return json_config_rule_set(resource_key, resource_value)
+
+def random_config_rules(count : Optional[int] = None) -> List:
+    if count is None: count = int(random.uniform(CONFIG_RULES_MIN_ENTRIES, CONFIG_RULES_MAX_ENTRIES))
+    return [random_config_rule() for _ in range(count)]
+
+def random_constraint() -> Dict:
+    constraint_type = random_path()
+    constraint_value = random_dict()
+    return json_constraint_custom(constraint_type, constraint_value)
+
+def random_constraints(count : Optional[int] = None) -> List:
+    if count is None: count = int(random.uniform(CONSTRAINTS_MIN_ENTRIES, CONSTRAINTS_MAX_ENTRIES))
+    return [random_constraint() for _ in range(count)]
+
+def random_endpoint(device_uuid : str) -> Dict:
+    topology_id = json_topology_id(str(uuid.uuid4()), context_id=json_context_id(str(uuid.uuid4())))
+    return json_endpoint(json_device_id(device_uuid), str(uuid.uuid4()), 'internal/copper', topology_id=topology_id)
+
+def random_endpoints(device_uuid : str, count : Optional[int] = None) -> List:
+    if count is None: count = int(random.uniform(DEVICE_MIN_ENDPOINTS, DEVICE_MAX_ENDPOINTS))
+    return [random_endpoint(device_uuid) for _ in range(count)]
+
+def random_endpoint_id(device_uuid : str) -> Dict:
+    topology_id = json_topology_id(str(uuid.uuid4()), context_id=json_context_id(str(uuid.uuid4())))
+    return json_endpoint_id(json_device_id(device_uuid), str(uuid.uuid4()), topology_id=topology_id)
+
+def random_endpoint_ids(device_uuid : str, count : Optional[int] = None) -> List:
+    if count is None: count = int(random.uniform(DEVICE_MIN_ENDPOINTS, DEVICE_MAX_ENDPOINTS))
+    return [random_endpoint(device_uuid) for _ in range(count)]
+
+def get_random_endpoint(
+    devices : Dict[str, Device], excluded_device_uuids : Set[str] = set()
+) -> EndPoint:
+    device_uuids = set(devices.keys())
+    device_uuids = list(device_uuids.difference(excluded_device_uuids))
+    device_uuid = random.choice(device_uuids)
+    device = devices[device_uuid]
+    return random.choice(device.device_endpoints)
+
+def get_random_endpoints(
+    devices : Dict[str, Device], count : Optional[int] = None
+) -> Optional[List[EndPoint]]:
+    if len(devices) < count: return None # Too few devices
+    endpoints = list()
+    used_device_uuids = set()
+    for _ in range(count):
+        endpoint = get_random_endpoint(devices, used_device_uuids)
+        used_device_uuids.add(endpoint.endpoint_id.device_id.device_uuid.uuid)
+        endpoints.append(endpoint)
+    return endpoints
+
+def random_device(device_uuid : Optional[str] = None) -> Device:
+    if device_uuid is None: device_uuid = str(uuid.uuid4())
+    device_type = DEVICE_EMUPR_TYPE
+    device_op_stat = DEVICE_DISABLED
+    drivers = DEVICE_EMU_DRIVERS
+    endpoints = random_endpoints(device_uuid)
+    config_rules = random_config_rules()
+    return Device(**json_device(
+        device_uuid, device_type, device_op_stat, endpoints=endpoints, config_rules=config_rules, drivers=drivers
+    ))
+
+def random_link(
+    devices : Dict[str, Device], link_uuid : Optional[str] = None
+) -> Optional[Link]:
+    if link_uuid is None: link_uuid = str(uuid.uuid4())
+    endpoints = get_random_endpoints(devices, count=2)
+    if endpoints is None: return None
+    endpoint_ids = [grpc_message_to_json(endpoint.endpoint_id) for endpoint in endpoints]
+    return Link(**json_link(link_uuid, endpoint_ids))
+
+def random_service(
+    devices : Dict[str, Device], service_uuid : Optional[str] = None
+) -> Optional[Service]:
+    if service_uuid is None: service_uuid = str(uuid.uuid4())
+    context_id = json_context_id(str(uuid.uuid4()))
+    service_type = ServiceTypeEnum.SERVICETYPE_L2NM
+    service_status = ServiceStatusEnum.SERVICESTATUS_PLANNED
+    endpoints = get_random_endpoints(devices, count=2)
+    if endpoints is None: return None
+    endpoint_ids = [grpc_message_to_json(endpoint.endpoint_id) for endpoint in endpoints]
+    constraints = random_constraints(count=3)
+    config_rules = random_config_rules(count=5)
+    return Service(**json_service(
+        service_uuid, service_type, context_id=context_id, status=service_status,
+        endpoint_ids=endpoint_ids, constraints=constraints, config_rules=config_rules))
+
+def random_slice(
+    devices : Dict[str, Device], services : Dict[str, Service], slices : Dict[str, Service],
+    slice_uuid : Optional[str] = None
+) -> Optional[Slice]:
+    if slice_uuid is None: slice_uuid = str(uuid.uuid4())
+    context_id = json_context_id(str(uuid.uuid4()))
+    slice_status = SliceStatusEnum.SLICESTATUS_PLANNED
+    endpoints = get_random_endpoints(devices, count=2)
+    if endpoints is None: return None
+    endpoint_ids = [grpc_message_to_json(endpoint.endpoint_id) for endpoint in endpoints]
+    constraints = random_constraints(count=3)
+    config_rules = random_config_rules(count=5)
+
+    num_sub_services = int(random.uniform(SLICE_MIN_SUBSERVICES, SLICE_MAX_SUBSERVICES))
+    num_sub_services = min(num_sub_services, len(services))
+    sub_services = random.sample(list(services.values()), num_sub_services) if num_sub_services > 0 else []
+    sub_service_ids = [grpc_message_to_json(sub_service.service_id) for sub_service in sub_services]
+
+    num_sub_slices = int(random.uniform(SLICE_MIN_SUBSLICES, SLICE_MAX_SUBSLICES))
+    num_sub_slices = min(num_sub_slices, len(slices))
+    sub_slices = random.sample(list(slices.values()), num_sub_slices) if num_sub_slices > 0 else []
+    sub_slice_ids = [grpc_message_to_json(sub_slice.slice_id) for sub_slice in sub_slices]
+
+    owner = {'owner_uuid': {'uuid': str(uuid.uuid4())}, 'owner_string': random_word()}
+
+    return Slice(**json_slice(
+        slice_uuid, context_id=context_id, status=slice_status,
+        endpoint_ids=endpoint_ids, constraints=constraints, config_rules=config_rules,
+        service_ids=sub_service_ids, subslice_ids=sub_slice_ids, owner=owner))
diff --git a/src/dlt/performance/play_ground/Settings.py b/src/dlt/performance/play_ground/Settings.py
new file mode 100644
index 0000000000000000000000000000000000000000..c04f6139d84fc280d33d580fd03e2598788a945f
--- /dev/null
+++ b/src/dlt/performance/play_ground/Settings.py
@@ -0,0 +1,38 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+WORD_ALPHABET = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
+WORD_MIN_LENGTH = 5
+WORD_MAX_LENGTH = 100
+
+PATH_MIN_PARTS = 2
+PATH_MAX_PARTS = 15
+
+DICT_MIN_ENTRIES = 1
+DICT_MAX_ENTRIES = 10
+
+DEVICE_MIN_ENDPOINTS = 2
+DEVICE_MAX_ENDPOINTS = 48
+
+CONFIG_RULES_MIN_ENTRIES = 3
+CONFIG_RULES_MAX_ENTRIES = 100
+
+CONSTRAINTS_MIN_ENTRIES = 3
+CONSTRAINTS_MAX_ENTRIES = 10
+
+SLICE_MIN_SUBSERVICES = 0
+SLICE_MAX_SUBSERVICES = 3
+
+SLICE_MIN_SUBSLICES = 0
+SLICE_MAX_SUBSLICES = 3
diff --git a/src/dlt/performance/play_ground/__init__.py b/src/dlt/performance/play_ground/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..3e37b261ef4bf0f0f33ce36f9d660e252b362690
--- /dev/null
+++ b/src/dlt/performance/play_ground/__init__.py
@@ -0,0 +1,216 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+import logging, operator, random
+from typing import Dict, Tuple
+from common.proto.context_pb2 import Device, Link, Service, Slice
+from dlt.connector.client.DltGatewayClient import DltGatewayClient
+from .Enums import ActionEnum, RecordTypeEnum
+from .Dlt import (
+    DLT_OPERATION_CREATE, DLT_OPERATION_DELETE, DLT_OPERATION_UPDATE,
+    DLT_RECORD_TYPE_DEVICE, DLT_RECORD_TYPE_LINK, DLT_RECORD_TYPE_SERVICE, DLT_RECORD_TYPE_SLICE,
+    dlt_record_get, dlt_record_set)
+from .PerfData import PerfData
+from .Random import random_device, random_link, random_service, random_slice
+
+LOGGER = logging.getLogger(__name__)
+
+class PlayGround:
+    def __init__(self, dltgateway_client : DltGatewayClient, domain_uuid : str) -> None:
+        self._dltgateway_client = dltgateway_client
+        self._domain_uuid = domain_uuid
+        self._perf_data = PerfData()
+        self._devices  : Dict[str, Device ] = dict()
+        self._links    : Dict[str, Link   ] = dict()
+        self._services : Dict[str, Service] = dict()
+        self._slices   : Dict[str, Slice  ] = dict()
+
+    @property
+    def perf_data(self): return self._perf_data
+
+    def _choose_operation(self) -> Tuple[ActionEnum, RecordTypeEnum]:
+        operations = self._perf_data.operation_counters
+        if len(operations) == 0:
+            action = random.choice(list(ActionEnum.__members__.values()))
+            record_type = random.choice(list(RecordTypeEnum.__members__.values()))
+            return action, record_type
+
+        operations = sorted(operations.items(), key=operator.itemgetter(1))
+        min_executions = operations[0][1]
+        max_executions = operations[-1][1]
+        bound = (max_executions + min_executions) / 2 # enable randomness, but try to keep some level of balance
+        operations = list(filter(lambda t: t[1] <= bound, operations))
+        if len(operations) == 0:
+            action = random.choice(list(ActionEnum.__members__.values()))
+            record_type = random.choice(list(RecordTypeEnum.__members__.values()))
+            return action, record_type
+
+        (action, record_type),_ = random.choice(operations)
+        return action, record_type
+
+    def run_random_operation(self) -> bool:
+        method = None
+        while method is None:
+            action, record_type = self._choose_operation()
+            method_name = '{:s}_{:s}'.format(action.value, record_type.value)
+            method = getattr(self, method_name, None)
+        return method()
+
+    def create_device(self) -> bool:
+        device = random_device()
+        if device is None: return False
+        device_uuid = device.device_id.device_uuid.uuid # pylint: disable=no-member
+        self._devices[device_uuid] = device
+        perf_point = self._perf_data.add_point(ActionEnum.CREATE, RecordTypeEnum.DEVICE, device_uuid)
+        dlt_record_set(self._dltgateway_client, perf_point, DLT_OPERATION_CREATE, self._domain_uuid, device)
+        return True
+
+    def get_device(self) -> bool:
+        if len(self._devices) == 0: return False
+        device_uuid = random.choice(list(self._devices.keys()))
+        perf_point = self._perf_data.add_point(ActionEnum.GET, RecordTypeEnum.DEVICE, device_uuid)
+        data = dlt_record_get(
+            self._dltgateway_client, perf_point, self._domain_uuid, DLT_RECORD_TYPE_DEVICE, device_uuid)
+        self._devices[device_uuid] = Device(**data)
+        return True
+
+    def update_device(self) -> bool:
+        if len(self._devices) == 0: return False
+        device_uuid = random.choice(list(self._devices.keys()))
+        device = random_device(device_uuid=device_uuid)
+        if device is None: return False
+        perf_point = self._perf_data.add_point(ActionEnum.UPDATE, RecordTypeEnum.DEVICE, device_uuid)
+        dlt_record_set(self._dltgateway_client, perf_point, DLT_OPERATION_UPDATE, self._domain_uuid, device)
+        self._devices[device_uuid] = device
+        return True
+
+    def delete_device(self) -> bool:
+        if len(self._devices) == 0: return False
+        device_uuid = random.choice(list(self._devices.keys()))
+        device = self._devices.pop(device_uuid, None)
+        if device is None: return False
+        perf_point = self._perf_data.add_point(ActionEnum.DELETE, RecordTypeEnum.DEVICE, device_uuid)
+        dlt_record_set(self._dltgateway_client, perf_point, DLT_OPERATION_DELETE, self._domain_uuid, device)
+        return True
+
+    def create_link(self) -> bool:
+        link = random_link(self._devices)
+        if link is None: return False
+        link_uuid = link.link_id.link_uuid.uuid # pylint: disable=no-member
+        perf_point = self._perf_data.add_point(ActionEnum.CREATE, RecordTypeEnum.LINK, link_uuid)
+        dlt_record_set(self._dltgateway_client, perf_point, DLT_OPERATION_CREATE, self._domain_uuid, link)
+        self._links[link_uuid] = link
+        return True
+
+    def get_link(self) -> bool:
+        if len(self._links) == 0: return False
+        link_uuid = random.choice(list(self._links.keys()))
+        perf_point = self._perf_data.add_point(ActionEnum.GET, RecordTypeEnum.LINK, link_uuid)
+        data = dlt_record_get(
+            self._dltgateway_client, perf_point, self._domain_uuid, DLT_RECORD_TYPE_LINK, link_uuid)
+        self._links[link_uuid] = Link(**data)
+        return True
+
+    def update_link(self) -> bool:
+        if len(self._links) == 0: return False
+        link_uuid = random.choice(list(self._links.keys()))
+        link = random_link(self._devices, link_uuid=link_uuid)
+        if link is None: return False
+        perf_point = self._perf_data.add_point(ActionEnum.UPDATE, RecordTypeEnum.LINK, link_uuid)
+        dlt_record_set(self._dltgateway_client, perf_point, DLT_OPERATION_UPDATE, self._domain_uuid, link)
+        self._links[link_uuid] = link
+        return True
+
+    def delete_link(self) -> bool:
+        if len(self._links) == 0: return False
+        link_uuid = random.choice(list(self._links.keys()))
+        link = self._links.pop(link_uuid, None)
+        if link is None: return False
+        perf_point = self._perf_data.add_point(ActionEnum.DELETE, RecordTypeEnum.LINK, link_uuid)
+        dlt_record_set(self._dltgateway_client, perf_point, DLT_OPERATION_DELETE, self._domain_uuid, link)
+        return True
+
+    def create_service(self) -> bool:
+        service = random_service(self._devices)
+        if service is None: return False
+        service_uuid = service.service_id.service_uuid.uuid # pylint: disable=no-member
+        perf_point = self._perf_data.add_point(ActionEnum.CREATE, RecordTypeEnum.SERVICE, service_uuid)
+        dlt_record_set(self._dltgateway_client, perf_point, DLT_OPERATION_CREATE, self._domain_uuid, service)
+        self._services[service_uuid] = service
+        return True
+
+    def get_service(self) -> bool:
+        if len(self._services) == 0: return False
+        service_uuid = random.choice(list(self._services.keys()))
+        perf_point = self._perf_data.add_point(ActionEnum.GET, RecordTypeEnum.SERVICE, service_uuid)
+        data = dlt_record_get(
+            self._dltgateway_client, perf_point, self._domain_uuid, DLT_RECORD_TYPE_SERVICE, service_uuid)
+        self._services[service_uuid] = Service(**data)
+        return True
+
+    def update_service(self) -> bool:
+        if len(self._services) == 0: return False
+        service_uuid = random.choice(list(self._services.keys()))
+        service = random_service(self._devices, service_uuid=service_uuid)
+        if service is None: return False
+        perf_point = self._perf_data.add_point(ActionEnum.UPDATE, RecordTypeEnum.SERVICE, service_uuid)
+        dlt_record_set(self._dltgateway_client, perf_point, DLT_OPERATION_UPDATE, self._domain_uuid, service)
+        self._services[service_uuid] = service
+        return True
+
+    def delete_service(self) -> bool:
+        if len(self._services) == 0: return False
+        service_uuid = random.choice(list(self._services.keys()))
+        service = self._services.pop(service_uuid, None)
+        if service is None: return False
+        perf_point = self._perf_data.add_point(ActionEnum.DELETE, RecordTypeEnum.SERVICE, service_uuid)
+        dlt_record_set(self._dltgateway_client, perf_point, DLT_OPERATION_DELETE, self._domain_uuid, service)
+        return True
+
+    def create_slice(self) -> bool:
+        slice_ = random_slice(self._devices, self._services, self._slices)
+        if slice_ is None: return False
+        slice_uuid = slice_.slice_id.slice_uuid.uuid # pylint: disable=no-member
+        perf_point = self._perf_data.add_point(ActionEnum.CREATE, RecordTypeEnum.SLICE, slice_uuid)
+        dlt_record_set(self._dltgateway_client, perf_point, DLT_OPERATION_CREATE, self._domain_uuid, slice_)
+        self._slices[slice_uuid] = slice_
+        return True
+
+    def get_slice(self) -> bool:
+        if len(self._slices) == 0: return False
+        slice_uuid = random.choice(list(self._slices.keys()))
+        perf_point = self._perf_data.add_point(ActionEnum.GET, RecordTypeEnum.SLICE, slice_uuid)
+        data = dlt_record_get(
+            self._dltgateway_client, perf_point, self._domain_uuid, DLT_RECORD_TYPE_SLICE, slice_uuid)
+        self._slices[slice_uuid] = Slice(**data)
+        return True
+
+    def update_slice(self) -> bool:
+        if len(self._slices) == 0: return False
+        slice_uuid = random.choice(list(self._slices.keys()))
+        slice_ = random_slice(self._devices, self._services, self._slices, slice_uuid=slice_uuid)
+        if slice_ is None: return False
+        perf_point = self._perf_data.add_point(ActionEnum.UPDATE, RecordTypeEnum.SLICE, slice_uuid)
+        dlt_record_set(self._dltgateway_client, perf_point, DLT_OPERATION_UPDATE, self._domain_uuid, slice_)
+        self._slices[slice_uuid] = slice_
+        return True
+
+    def delete_slice(self) -> bool:
+        if len(self._slices) == 0: return False
+        slice_uuid = random.choice(list(self._slices.keys()))
+        slice_ = self._slices.pop(slice_uuid, None)
+        if slice_ is None: return False
+        perf_point = self._perf_data.add_point(ActionEnum.DELETE, RecordTypeEnum.SLICE, slice_uuid)
+        dlt_record_set(self._dltgateway_client, perf_point, DLT_OPERATION_DELETE, self._domain_uuid, slice_)
+        return True
diff --git a/src/dlt/performance/run_test.sh b/src/dlt/performance/run_test.sh
new file mode 100755
index 0000000000000000000000000000000000000000..58aa0b88e567a71766e5a4090c014484fe7aa180
--- /dev/null
+++ b/src/dlt/performance/run_test.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+PYTHONPATH=./src python -m dlt.performance
diff --git a/src/monitoring/service/MetricsDBTools.py b/src/monitoring/service/MetricsDBTools.py
index 11574e8f6577db0bab4add96da8157496d40e6f5..fd9c092b2d061865cb8c3d625eef8b5d2ef0eab7 100644
--- a/src/monitoring/service/MetricsDBTools.py
+++ b/src/monitoring/service/MetricsDBTools.py
@@ -317,6 +317,7 @@ class MetricsDB():
                     elif (not inRange and kpiMinIsNone and not kpiMaxIsNone and not includeMaxValue):
                         if (kpi_value > kpiMaxValue):
                             alarm = True
+
                     if alarm:
                         valid_kpi_list.append(kpi)
                 if valid_kpi_list:
diff --git a/src/opticalattackmanager/service/__main__.py b/src/opticalattackmanager/service/__main__.py
index af38e02a0c4a3098ce9684822654a2494611661d..6ea636f42eb4b992bb7d722188ccbc945a6a153d 100644
--- a/src/opticalattackmanager/service/__main__.py
+++ b/src/opticalattackmanager/service/__main__.py
@@ -67,7 +67,7 @@ SERVICE_LIST_MODE = int(
     get_setting("OPTICALATTACKMANAGER_SERVICE_LIST_MODE", default=1)
 )
 SERVICE_LIST_KEY = get_setting(
-    "OPTICALATTACKMANAGER_SERVICE_LIST_KEY", default="opt-sec:active-services"
+    "OPTICALATTACKMANAGER_SERVICE_LIST_KEY", default="opt-sec-active-services"
 )
 MIN_NUMBER_WORKERS = int(
     get_setting("OPTICALATTACKMANAGERSERVICE_LOOP_MIN_WORKERS", default=2)
@@ -295,6 +295,7 @@ async def monitor_services(terminate, service_list=None, cache=None):
 
         current_list = []
         if SERVICE_LIST_MODE == LIST_REDIS_MODE:
+            LOGGER.debug(f"Services at the Redis DB: {cache.llen(SERVICE_LIST_KEY)}")
             current_list.extend(
                 [
                     pickle.loads(service)
@@ -332,22 +333,6 @@ async def monitor_services(terminate, service_list=None, cache=None):
             )
         )
 
-        # start standard implementation
-        # tasks = []
-        # for service in current_list:
-        #     aw = detect_attack(
-        #         host,
-        #         port,
-        #         service["context"],
-        #         service["service"],
-        #         service["kpi"],
-        #         # allow at most 90% of the monitoring interval to succeed
-        #         monitoring_interval * 0.9,
-        #     )
-        #     tasks.append(aw)
-        # [await aw for aw in tasks]
-        # end standard implementation
-
         # start pool implementation
         if len(current_list) == 0:  # guard clause to re-check if services still there
             LOGGER.info(
@@ -385,7 +370,6 @@ async def monitor_services(terminate, service_list=None, cache=None):
                 (i + 1) * k + min(i + 1, m),  # last index
                 host,
                 port,
-                DROP_COUNTER,
                 desired_monitoring_interval * 0.9,
             )
             for i in range(cur_number_workers)
@@ -476,6 +460,7 @@ def main():
     if SERVICE_LIST_MODE == LIST_REDIS_MODE:
         cache = redis.Redis(host=redis_host, port=redis_port, password=redis_password)
         cache.ping()
+        LOGGER.info(f"Connecting to Redis: host={redis_host}, port={redis_port}, password={redis_password}")
 
         # clean the existing list that will be populated later on in this function
         cache.delete(SERVICE_LIST_KEY)
@@ -544,7 +529,7 @@ def main():
     # asyncio.create_task(monitor_services(service_list))
 
     # Wait for Ctrl+C or termination signal
-    while not terminate.wait(timeout=1):
+    while not terminate.wait(timeout=10):
         pass
 
     LOGGER.info("Terminating...")
diff --git a/src/opticalattackmanager/utils/monitor.py b/src/opticalattackmanager/utils/monitor.py
index 0d37cd0effdbb9cb10ca5454ef75d138a3d5fb4a..c34ac217c0d29b086101e7fafc7d6cefef1fa114 100644
--- a/src/opticalattackmanager/utils/monitor.py
+++ b/src/opticalattackmanager/utils/monitor.py
@@ -14,6 +14,7 @@
 
 import asyncio
 import logging
+import traceback
 
 from grpclib.client import Channel
 from prometheus_client import Counter
@@ -31,7 +32,6 @@ async def detect_attack(
     context_id: str,
     service_id: str,
     kpi_id: str,
-    drop_counter: Counter,
     timeout: float = 20.0,
 ) -> None:
     try:
@@ -49,10 +49,9 @@ async def detect_attack(
         LOGGER.debug("Monitoring finished for {}/{}".format(service_id, kpi_id))
     except Exception as e:
         LOGGER.warning(
-            "Exception while processing service_id {}/{}".format(service_id, kpi_id)
+            "Exception while processing service_id {}/{}: {}".format(service_id, kpi_id, e)
         )
-        # LOGGER.exception(e)
-        drop_counter.inc()
+        traceback.print_exc()
 
 
 def delegate_services(
@@ -61,7 +60,6 @@ def delegate_services(
     end_index: int,
     host: str,
     port: str,
-    drop_counter: Counter,
     monitoring_interval: float,
 ):
     async def run_internal_loop():
@@ -73,7 +71,6 @@ def delegate_services(
                 service["context"],
                 service["service"],
                 service["kpi"],
-                drop_counter,
                 # allow at most 90% of the monitoring interval to succeed
                 monitoring_interval * 0.9,
             )
diff --git a/src/pathcomp/frontend/service/algorithms/tools/EroPathToHops.py b/src/pathcomp/frontend/service/algorithms/tools/EroPathToHops.py
index 670757d76b7d21ecf28f6ead4e8bc4e21951d18e..cf41f186f4f35c45cbb1ce836196272327f6048f 100644
--- a/src/pathcomp/frontend/service/algorithms/tools/EroPathToHops.py
+++ b/src/pathcomp/frontend/service/algorithms/tools/EroPathToHops.py
@@ -48,9 +48,52 @@ from common.proto.context_pb2 import Link
 
 LOGGER = logging.getLogger(__name__)
 
+MAP_TAPI_UUIDS = {
+    "c3dbaa44-9cda-5d54-8f99-0f282362be65": "5b835e46-53f7-52e8-9c8a-077322679e36", # node-1-port-13-input => node-1-port-13-output
+    "1fb9ac86-b7ad-5d6d-87b1-a09d995f1ddd": "c9df6ece-1650-5078-876a-1e488a453625", # node-1-port-14-input => node-1-port-14-output
+    "aa109937-8291-5a09-853a-97bff463e569": "b245480f-027c-53a0-9320-fca5b9d7a1e1", # node-1-port-15-input => node-1-port-15-output
+    "6653ae16-42a3-56b5-adf3-71adda024a61": "ac356900-ce2f-5c15-b038-1b05e6f50bf7", # node-1-port-17-input => node-1-port-17-output
+    "d782ef85-a473-50b4-93b5-2af86024a42a": "dcfeedd3-2d47-5bc8-b31c-ed9f973d8b76", # node-2-port-13-input => node-2-port-13-output
+    "bbbd83ef-6053-55dc-ab08-06fb0c2bd081": "57bcf45b-eb47-5a9c-86d1-d9cff0c910fd", # node-2-port-14-input => node-2-port-14-output
+    "27cdf70d-4e48-53ff-bc4f-20addf6524c0": "fd31eff5-392e-5fb5-a6f4-6dfca583344d", # node-2-port-15-input => node-2-port-15-output
+    "55ac2364-fad8-5a05-ac2b-5003997ff89e": "d12a2591-7f4a-575d-8fda-0bc3d6b7ca32", # node-2-port-17-input => node-2-port-17-output
+    "59f44a3c-32a5-5abf-af58-45e6fa7ca657": "1977ef5c-4383-5195-9221-0cdf8ee26cb7", # node-3-port-13-input => node-3-port-13-output
+    "1be3f905-d553-5291-9906-47c0772d45aa": "9def067b-9a75-54df-8867-853f35a42e87", # node-3-port-14-input => node-3-port-14-output
+    "fb4ece7a-2dd1-593a-b6ca-a787b3b59fc5": "1f294257-132a-54ad-b653-ef8b7517c9d8", # node-3-port-15-input => node-3-port-15-output
+    "a571d2fe-c7f8-5ac8-b2af-8e5b92a558b0": "5b60a688-deac-567a-8e36-0d52e56fd4fc", # node-3-port-16-input => node-3-port-16-output
+    "9ea9dc53-2d6a-5f28-b81a-e930f7cbedf9": "2aec14c1-3a84-5cba-8f22-783bd0273cd0", # node-3-port-17-input => node-3-port-17-output
+    "9ec8e0f3-3378-55e0-bed1-be1fe120a1a9": "ece2ed55-ce16-59d3-8137-3f4cf17e67ab", # node-3-port-18-input => node-3-port-18-output
+    "a7e114aa-a3b6-52ae-b7b7-0e5fe4dd4d1c": "0a05e43d-a13c-5276-9839-613600f3ff28", # node-4-port-13-input => node-4-port-13-output
+    "4ca8357a-3468-51e6-bba8-65137486666f": "18926fdf-de5c-5a52-be88-cccc065e5e03", # node-4-port-14-input => node-4-port-14-output
+    "a7e9f06f-6fd2-594e-8a0c-25bfe8c652d7": "1adb9e17-e499-58dc-8aa2-881ed5ce9670", # node-4-port-15-input => node-4-port-15-output
+    "9f6a23b2-c71c-5559-8fb3-f76421bea1d9": "049bb1f1-cc04-5b72-8c0f-43891d9637bf", # node-4-port-16-input => node-4-port-16-output
+    "f1d74c96-41f5-5eb9-a160-a38463184934": "2206440b-ef66-5d3e-8da5-40608fb00a10", # node-4-port-17-input => node-4-port-17-output
+
+    "5b835e46-53f7-52e8-9c8a-077322679e36": "c3dbaa44-9cda-5d54-8f99-0f282362be65", # node-1-port-13-output => node-1-port-13-input
+    "c9df6ece-1650-5078-876a-1e488a453625": "1fb9ac86-b7ad-5d6d-87b1-a09d995f1ddd", # node-1-port-14-output => node-1-port-14-input
+    "b245480f-027c-53a0-9320-fca5b9d7a1e1": "aa109937-8291-5a09-853a-97bff463e569", # node-1-port-15-output => node-1-port-15-input
+    "ac356900-ce2f-5c15-b038-1b05e6f50bf7": "6653ae16-42a3-56b5-adf3-71adda024a61", # node-1-port-17-output => node-1-port-17-input
+    "dcfeedd3-2d47-5bc8-b31c-ed9f973d8b76": "d782ef85-a473-50b4-93b5-2af86024a42a", # node-2-port-13-output => node-2-port-13-input
+    "57bcf45b-eb47-5a9c-86d1-d9cff0c910fd": "bbbd83ef-6053-55dc-ab08-06fb0c2bd081", # node-2-port-14-output => node-2-port-14-input
+    "fd31eff5-392e-5fb5-a6f4-6dfca583344d": "27cdf70d-4e48-53ff-bc4f-20addf6524c0", # node-2-port-15-output => node-2-port-15-input
+    "d12a2591-7f4a-575d-8fda-0bc3d6b7ca32": "55ac2364-fad8-5a05-ac2b-5003997ff89e", # node-2-port-17-output => node-2-port-17-input
+    "1977ef5c-4383-5195-9221-0cdf8ee26cb7": "59f44a3c-32a5-5abf-af58-45e6fa7ca657", # node-3-port-13-output => node-3-port-13-input
+    "9def067b-9a75-54df-8867-853f35a42e87": "1be3f905-d553-5291-9906-47c0772d45aa", # node-3-port-14-output => node-3-port-14-input
+    "1f294257-132a-54ad-b653-ef8b7517c9d8": "fb4ece7a-2dd1-593a-b6ca-a787b3b59fc5", # node-3-port-15-output => node-3-port-15-input
+    "5b60a688-deac-567a-8e36-0d52e56fd4fc": "a571d2fe-c7f8-5ac8-b2af-8e5b92a558b0", # node-3-port-16-output => node-3-port-16-input
+    "2aec14c1-3a84-5cba-8f22-783bd0273cd0": "9ea9dc53-2d6a-5f28-b81a-e930f7cbedf9", # node-3-port-17-output => node-3-port-17-input
+    "ece2ed55-ce16-59d3-8137-3f4cf17e67ab": "9ec8e0f3-3378-55e0-bed1-be1fe120a1a9", # node-3-port-18-output => node-3-port-18-input
+    "0a05e43d-a13c-5276-9839-613600f3ff28": "a7e114aa-a3b6-52ae-b7b7-0e5fe4dd4d1c", # node-4-port-13-output => node-4-port-13-input
+    "18926fdf-de5c-5a52-be88-cccc065e5e03": "4ca8357a-3468-51e6-bba8-65137486666f", # node-4-port-14-output => node-4-port-14-input
+    "1adb9e17-e499-58dc-8aa2-881ed5ce9670": "a7e9f06f-6fd2-594e-8a0c-25bfe8c652d7", # node-4-port-15-output => node-4-port-15-input
+    "049bb1f1-cc04-5b72-8c0f-43891d9637bf": "9f6a23b2-c71c-5559-8fb3-f76421bea1d9", # node-4-port-16-output => node-4-port-16-input
+    "2206440b-ef66-5d3e-8da5-40608fb00a10": "f1d74c96-41f5-5eb9-a160-a38463184934", # node-4-port-17-output => node-4-port-17-input
+}
+
 def eropath_to_hops(
     ero_path : List[Dict], endpoint_to_link_dict : Dict[Tuple[str, str, str], Tuple[Dict, Link]]
 ) -> List[Dict]:
+    LOGGER.debug('ero_path = {:s}'.format(str(ero_path)))
     try:
         path_hops = []
         num_ero_hops = len(ero_path)
@@ -68,13 +111,22 @@ def eropath_to_hops(
 
             if num_ero_hops - 1 == len(path_hops): break
 
-            link_tuple = endpoint_to_link_dict[(device_uuid, endpoint_uuid, 'src')]
-            if link_tuple is None: raise Exception('Malformed path')
-            ingress = link_tuple[0]['link_endpoint_ids'][-1]
+            endpoint_key = (last_hop['device'], last_hop['egress_ep'])
+            link_tuple = endpoint_to_link_dict.get(endpoint_key)
+            ingress = next(iter([
+                ep_id for ep_id in link_tuple[0]['link_endpoint_ids']
+                if (ep_id['endpoint_id']['device_id'] == device_uuid) and\
+                    (ep_id['endpoint_id']['endpoint_uuid'] != endpoint_uuid)
+            ]), None)
+            if ingress['endpoint_id']['device_id'] != device_uuid: raise Exception('Malformed path')
+            ingress_ep = ingress['endpoint_id']['endpoint_uuid']
+            ingress_ep = MAP_TAPI_UUIDS.get(ingress_ep, ingress_ep)
             path_hops.append({
                 'device': ingress['endpoint_id']['device_id'],
-                'ingress_ep': ingress['endpoint_id']['endpoint_uuid']
+                'ingress_ep': ingress_ep,
+                'egress_ep': endpoint_uuid,
             })
+        LOGGER.debug('path_hops = {:s}'.format(str(path_hops)))
         return path_hops
     except:
         LOGGER.exception('Unhandled exception: ero_path={:s} endpoint_to_link_dict={:s}'.format(
diff --git a/src/policy/mvnw b/src/policy/mvnw
old mode 100644
new mode 100755
diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java
index 141821958eca02925bdebebdd8a34f46a5844a8a..a1556ffbd715e0065681dcfa6001dd041ff89ef0 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java
@@ -21,6 +21,7 @@ import eu.teraflow.policy.context.model.Device;
 import eu.teraflow.policy.context.model.EndPointId;
 import eu.teraflow.policy.context.model.Service;
 import eu.teraflow.policy.context.model.ServiceId;
+import eu.teraflow.policy.model.PolicyRuleService;
 import io.smallrye.mutiny.Uni;
 import java.util.ArrayList;
 import java.util.List;
@@ -42,73 +43,44 @@ public class PolicyRuleConditionValidator {
         this.contextService = contextService;
     }
 
-    public Uni<Boolean> validateDeviceId(String deviceId) {
-        final var isDeviceIdValid = isDeviceIdValid(deviceId);
-
-        isDeviceIdValid
-                .subscribe()
-                .with(
-                        deviceIdIdBooleanValue -> {
-                            if (Boolean.FALSE.equals(deviceIdIdBooleanValue)) {
-                                LOGGER.errorf(INVALID_MESSAGE, deviceId);
-                            }
-                            LOGGER.infof(VALID_MESSAGE, deviceId);
-                        });
-
-        return isDeviceIdValid;
-    }
-
-    public Uni<Boolean> validateServiceId(ServiceId serviceId) {
-        final var isServiceIdValid = isServiceIdValid(serviceId);
-
-        isServiceIdValid
-                .subscribe()
-                .with(
-                        serviceIdBooleanValue -> {
-                            if (Boolean.FALSE.equals(serviceIdBooleanValue)) {
-                                LOGGER.errorf(INVALID_MESSAGE, serviceId);
-                            }
-                        });
-
-        return isServiceIdValid;
-    }
-
-    public Uni<Boolean> validateUpdatedPolicyRuleId(String updatedPolicyRuleId) {
-        final var isUpdatedPolicyRuleIdValid = isUpdatedPolicyRuleIdValid(updatedPolicyRuleId);
-
-        isUpdatedPolicyRuleIdValid
-                .subscribe()
-                .with(
-                        serviceIdBooleanValue -> {
-                            if (Boolean.FALSE.equals(serviceIdBooleanValue)) {
-                                LOGGER.errorf(INVALID_MESSAGE, updatedPolicyRuleId);
-                            }
-                        });
-
-        return isUpdatedPolicyRuleIdValid;
-    }
-
-    private Uni<Boolean> isDeviceIdValid(String deviceId) {
+    public Uni<Boolean> isDeviceIdValid(String deviceId) {
         return contextService
                 .getDevice(deviceId)
+                .onFailure()
+                .recoverWithItem((Device) null)
                 .onItem()
                 .transform(device -> checkIfDeviceIdExists(device, deviceId));
     }
 
     private boolean checkIfDeviceIdExists(Device device, String deviceId) {
-        final var deviceDeviceId = device.getDeviceId();
+        if (device == null) {
+            return false;
+        }
 
+        final var deviceDeviceId = device.getDeviceId();
         return deviceDeviceId.equals(deviceId);
     }
 
-    private Uni<Boolean> isServiceIdValid(ServiceId serviceId) {
+    public Uni<Boolean> isServiceIdValid(ServiceId serviceId, List<String> deviceIds) {
         return contextService
                 .getService(serviceId)
+                .onFailure()
+                .recoverWithItem((Service) null)
                 .onItem()
-                .transform(service -> checkIfServiceIdExists(service, serviceId));
+                .transform(service -> checkIfServiceIsValid(service, serviceId, deviceIds));
+    }
+
+    private boolean checkIfServiceIsValid(
+            Service service, ServiceId serviceId, List<String> deviceIds) {
+        return (checkIfServiceIdExists(service, serviceId)
+                && checkIfServicesDeviceIdsExist(service, deviceIds));
     }
 
     private boolean checkIfServiceIdExists(Service service, ServiceId serviceId) {
+        if (service == null) {
+            return false;
+        }
+
         final var serviceServiceIdServiceId = service.getServiceId();
         final var serviceServiceIdContextId = serviceServiceIdServiceId.getContextId();
         final var serviceServiceIdId = serviceServiceIdServiceId.getId();
@@ -117,14 +89,11 @@ public class PolicyRuleConditionValidator {
                 && serviceServiceIdId.equals(serviceId.getId());
     }
 
-    public Uni<Boolean> isServicesDeviceIdsValid(ServiceId serviceId, List<String> deviceIds) {
-        return contextService
-                .getService(serviceId)
-                .onItem()
-                .transform(service -> checkIfServicesDeviceIdsExist(service, deviceIds));
-    }
-
     private boolean checkIfServicesDeviceIdsExist(Service service, List<String> deviceIds) {
+        if (deviceIds.isEmpty()) {
+            return true;
+        }
+
         List<String> serviceDeviceIds = new ArrayList<>();
         for (EndPointId serviceEndPointId : service.getServiceEndPointIds()) {
             serviceDeviceIds.add(serviceEndPointId.getDeviceId());
@@ -133,7 +102,7 @@ public class PolicyRuleConditionValidator {
         return deviceIds.containsAll(serviceDeviceIds);
     }
 
-    private Uni<Boolean> isUpdatedPolicyRuleIdValid(String updatedPolicyRuleId) {
+    public Uni<Boolean> isUpdatedPolicyRuleIdValid(String updatedPolicyRuleId) {
         return contextService
                 .getPolicyRule(updatedPolicyRuleId)
                 .onItem()
@@ -146,4 +115,25 @@ public class PolicyRuleConditionValidator {
                 .ifNull()
                 .continueWith(false);
     }
+
+    public Uni<Boolean> isPolicyRuleServiceValid(String updatedPolicyRuleId, ServiceId serviceId) {
+        return contextService
+                .getPolicyRule(updatedPolicyRuleId)
+                .onItem()
+                .ifNotNull()
+                .transform(
+                        policyRule -> {
+                            var policyRuleService =
+                                    (PolicyRuleService) policyRule.getPolicyRuleType().getPolicyRuleType();
+                            if (policyRuleService.getServiceId().getId().equals(serviceId.getId())) {
+                                return true;
+                            }
+                            return false;
+                        })
+                .onItem()
+                .ifNull()
+                .continueWith(false)
+                .onFailure()
+                .recoverWithItem(false);
+    }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
index fba43c18a573115d279a251f4806834fdefa2129..8462e0b9d7ec875004cea0a1b2836dc92d3b6f15 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
@@ -44,11 +44,10 @@ import eu.teraflow.policy.monitoring.model.AlarmDescriptor;
 import eu.teraflow.policy.monitoring.model.AlarmResponse;
 import eu.teraflow.policy.monitoring.model.AlarmSubscription;
 import eu.teraflow.policy.monitoring.model.KpiValueRange;
-import eu.teraflow.policy.monitoring.model.MonitorKpiRequest;
 import eu.teraflow.policy.service.ServiceService;
 import io.smallrye.mutiny.Multi;
 import io.smallrye.mutiny.Uni;
-import java.time.Duration;
+import io.smallrye.mutiny.groups.UniJoin;
 import java.time.Instant;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -56,7 +55,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Random;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
 import org.jboss.logging.Logger;
@@ -71,6 +69,9 @@ public class PolicyServiceImpl implements PolicyService {
     private static final int ACCEPTABLE_NUMBER_OF_ALARMS = 3;
     private static final int MONITORING_WINDOW_IN_SECONDS = 5;
     private static final int SAMPLING_RATE_PER_SECOND = 1;
+    // TODO: Find a better way to disregard alarms while reconfiguring path
+    // Temporary solution for not calling the same rpc more than it's needed
+    private static int noAlarms = 0;
 
     private static final PolicyRuleState INSERTED_POLICYRULE_STATE =
             new PolicyRuleState(
@@ -160,94 +161,221 @@ public class PolicyServiceImpl implements PolicyService {
         final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
         if (!policyRuleBasic.areArgumentsValid()) {
             LOGGER.error(policyRuleService.getExeceptionMessage());
-            setPolicyRuleServiceToContext(
-                    policyRuleService,
+            final var policyRuleState =
                     new PolicyRuleState(
-                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleBasic.getExeceptionMessage()));
-            return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
+                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleBasic.getExeceptionMessage());
+            return Uni.createFrom().item(policyRuleState);
         }
 
-        policyRuleBasic.setPolicyRuleState(INSERTED_POLICYRULE_STATE);
-        policyRuleService.setPolicyRuleBasic(policyRuleBasic);
-        final var policyRuleTypeService = new PolicyRuleTypeService(policyRuleService);
-        final var policyRule = new PolicyRule(policyRuleTypeService);
+        final var serviceId = policyRuleService.getServiceId();
+        final var deviceIds = policyRuleService.getDeviceIds();
+        final var isServiceValid = policyRuleConditionValidator.isServiceIdValid(serviceId, deviceIds);
+
+        return isServiceValid
+                .onItem()
+                .transform(
+                        isService -> {
+                            if (!isService) {
+                                var policyRuleState =
+                                        new PolicyRuleState(
+                                                PolicyRuleStateEnum.POLICY_FAILED,
+                                                String.format(INVALID_MESSAGE, serviceId));
+
+                                return policyRuleState;
+                            }
 
-        contextService
-                .setPolicyRule(policyRule)
-                .subscribe()
-                .with(id -> validateService(policyRuleService));
-        return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
+                            final var policyRuleTypeService = new PolicyRuleTypeService(policyRuleService);
+                            final var policyRule = new PolicyRule(policyRuleTypeService);
+                            final var alarmDescriptorList = createAlarmDescriptorList(policyRule);
+
+                            if (alarmDescriptorList.isEmpty()) {
+                                var policyRuleState =
+                                        new PolicyRuleState(
+                                                PolicyRuleStateEnum.POLICY_FAILED,
+                                                String.format(
+                                                        "Invalid PolicyRuleConditions in PolicyRule with ID: %s",
+                                                        policyRuleBasic.getPolicyRuleId()));
+                                return policyRuleState;
+                            }
+                            contextService.setPolicyRule(policyRule).subscribe().with(x -> {});
+                            setPolicyRuleServiceToContext(policyRuleService, VALIDATED_POLICYRULE_STATE);
+                            noAlarms = 0;
+
+                            // Create an alarmIds list that contains the promised ids returned from setKpiAlarm
+                            List<Uni<String>> alarmIds = new ArrayList<Uni<String>>();
+                            for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) {
+                                LOGGER.infof("alarmDescriptor:");
+                                LOGGER.infof(alarmDescriptor.toString());
+                                alarmIds.add(monitoringService.setKpiAlarm(alarmDescriptor));
+                            }
+
+                            // Transform the alarmIds into promised alarms returned from the
+                            // getAlarmResponseStream
+                            List<Multi<AlarmResponse>> alarmResponseStreamList = new ArrayList<>();
+                            for (Uni<String> alarmId : alarmIds) {
+                                alarmResponseStreamList.add(
+                                        alarmId
+                                                .onItem()
+                                                .transformToMulti(
+                                                        id -> {
+                                                            alarmPolicyRuleServiceMap.put(id, policyRuleService);
+
+                                                            // TODO: Create infinite subscription
+                                                            var alarmSubscription = new AlarmSubscription(id, 259200, 5000);
+                                                            return monitoringService.getAlarmResponseStream(alarmSubscription);
+                                                        }));
+                            }
+
+                            // Merge the promised alarms into one stream (Multi Object)
+                            final var multi = Multi.createBy().merging().streams(alarmResponseStreamList);
+                            setPolicyRuleServiceToContext(policyRuleService, PROVISIONED_POLICYRULE_STATE);
+
+                            monitorAlarmResponseForService(multi);
+
+                            // TODO: Resubscribe to the stream, if it has ended
+
+                            // TODO: Redesign evaluation of action
+                            // evaluateAction(policyRule, alarmDescriptorList, multi);
+
+                            return VALIDATED_POLICYRULE_STATE;
+                        });
     }
 
     @Override
-    public Uni<PolicyRuleState> updatePolicyService(PolicyRuleService policyRuleService) {
-        LOGGER.infof("Received %s", policyRuleService);
+    public Uni<PolicyRuleState> addPolicyDevice(PolicyRuleDevice policyRuleDevice) {
+        LOGGER.infof("Received %s", policyRuleDevice);
 
-        if (!policyRuleService.areArgumentsValid()) {
-            LOGGER.error(policyRuleService.getExeceptionMessage());
+        if (!policyRuleDevice.areArgumentsValid()) {
+            LOGGER.error(policyRuleDevice.getExeceptionMessage());
             final var policyRuleState =
                     new PolicyRuleState(
-                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleService.getExeceptionMessage());
+                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleDevice.getExeceptionMessage());
 
             return Uni.createFrom().item(policyRuleState);
         }
 
-        final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
+        final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
         if (!policyRuleBasic.areArgumentsValid()) {
-            LOGGER.error(policyRuleService.getExeceptionMessage());
-            setPolicyRuleServiceToContext(
-                    policyRuleService,
+            LOGGER.error(policyRuleDevice.getExeceptionMessage());
+            final var policyRuleState =
                     new PolicyRuleState(
-                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleBasic.getExeceptionMessage()));
-            return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
+                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleBasic.getExeceptionMessage());
+            return Uni.createFrom().item(policyRuleState);
         }
 
-        policyRuleBasic.setPolicyRuleState(UPDATED_POLICYRULE_STATE);
-        policyRuleService.setPolicyRuleBasic(policyRuleBasic);
-        final var policyRuleTypeService = new PolicyRuleTypeService(policyRuleService);
-        final var policyRule = new PolicyRule(policyRuleTypeService);
+        final var deviceIds = policyRuleDevice.getDeviceIds();
+        final var areDevicesValid = returnInvalidDeviceIds(deviceIds);
+
+        return areDevicesValid
+                .onItem()
+                .transform(
+                        areDevices -> {
+                            if (areDevices.contains(false)) {
+                                var policyRuleState =
+                                        new PolicyRuleState(
+                                                PolicyRuleStateEnum.POLICY_FAILED,
+                                                String.format(
+                                                        INVALID_MESSAGE,
+                                                        policyRuleDevice.getPolicyRuleBasic().getPolicyRuleId()));
+
+                                return policyRuleState;
+                            }
 
-        contextService
-                .setPolicyRule(policyRule)
-                .subscribe()
-                .with(id -> validateUpdatedPolicyService(policyRuleService));
+                            final var policyRuleTypeDevice = new PolicyRuleTypeDevice(policyRuleDevice);
+                            final var policyRule = new PolicyRule(policyRuleTypeDevice);
+
+                            final var alarmDescriptorList = createAlarmDescriptorList(policyRule);
+                            if (alarmDescriptorList.isEmpty()) {
+                                var policyRuleState =
+                                        new PolicyRuleState(
+                                                PolicyRuleStateEnum.POLICY_FAILED,
+                                                String.format(
+                                                        "Invalid PolicyRuleConditions in PolicyRule with ID: %s",
+                                                        policyRuleBasic.getPolicyRuleId()));
+                                return policyRuleState;
+                            }
+
+                            contextService.setPolicyRule(policyRule).subscribe().with(x -> {});
+                            setPolicyRuleDeviceToContext(policyRuleDevice, VALIDATED_POLICYRULE_STATE);
+                            noAlarms = 0;
+
+                            List<Uni<String>> alarmIds = new ArrayList<Uni<String>>();
+                            for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) {
+                                LOGGER.infof("alarmDescriptor:");
+                                LOGGER.infof(alarmDescriptor.toString());
+                                alarmIds.add(monitoringService.setKpiAlarm(alarmDescriptor));
+                            }
+
+                            // Transform the alarmIds into promised alarms returned from the
+                            // getAlarmResponseStream
+                            List<Multi<AlarmResponse>> alarmResponseStreamList = new ArrayList<>();
+                            for (Uni<String> alarmId : alarmIds) {
+                                alarmResponseStreamList.add(
+                                        alarmId
+                                                .onItem()
+                                                .transformToMulti(
+                                                        id -> {
+                                                            alarmPolicyRuleDeviceMap.put(id, policyRuleDevice);
+
+                                                            // TODO: Create infinite subscription
+                                                            var alarmSubscription = new AlarmSubscription(id, 259200, 5000);
+                                                            return monitoringService.getAlarmResponseStream(alarmSubscription);
+                                                        }));
+                            }
+
+                            // Merge the promised alarms into one stream (Multi Object)
+                            final var multi = Multi.createBy().merging().streams(alarmResponseStreamList);
+                            setPolicyRuleDeviceToContext(policyRuleDevice, PROVISIONED_POLICYRULE_STATE);
 
-        return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
+                            monitorAlarmResponseForDevice(multi);
+
+                            // TODO: Resubscribe to the stream, if it has ended
+
+                            // TODO: Redesign evaluation of action
+                            // evaluateAction(policyRule, alarmDescriptorList, multi);
+
+                            return VALIDATED_POLICYRULE_STATE;
+                        });
     }
 
     @Override
-    public Uni<PolicyRuleState> addPolicyDevice(PolicyRuleDevice policyRuleDevice) {
-        LOGGER.infof("Received %s", policyRuleDevice);
+    public Uni<PolicyRuleState> updatePolicyService(PolicyRuleService policyRuleService) {
+        LOGGER.infof("Received %s", policyRuleService);
 
-        if (!policyRuleDevice.areArgumentsValid()) {
-            LOGGER.error(policyRuleDevice.getExeceptionMessage());
+        if (!policyRuleService.areArgumentsValid()) {
+            LOGGER.error(policyRuleService.getExeceptionMessage());
             final var policyRuleState =
                     new PolicyRuleState(
-                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleDevice.getExeceptionMessage());
+                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleService.getExeceptionMessage());
 
             return Uni.createFrom().item(policyRuleState);
         }
 
-        final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
+        final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
         if (!policyRuleBasic.areArgumentsValid()) {
-            LOGGER.error(policyRuleDevice.getExeceptionMessage());
-            setPolicyRuleDeviceToContext(
-                    policyRuleDevice,
+            LOGGER.error(policyRuleService.getExeceptionMessage());
+            final var policyRuleState =
                     new PolicyRuleState(
-                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleBasic.getExeceptionMessage()));
-            return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
+                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleBasic.getExeceptionMessage());
+            return Uni.createFrom().item(policyRuleState);
         }
 
-        policyRuleBasic.setPolicyRuleState(INSERTED_POLICYRULE_STATE);
-        policyRuleDevice.setPolicyRuleBasic(policyRuleBasic);
-        final var policyRuleTypeDevice = new PolicyRuleTypeDevice(policyRuleDevice);
-        final var policyRule = new PolicyRule(policyRuleTypeDevice);
+        final var serviceId = policyRuleService.getServiceId();
+        final var policyRuleId = policyRuleBasic.getPolicyRuleId();
+        final var isPolicyRuleServiceValid =
+                policyRuleConditionValidator.isPolicyRuleServiceValid(policyRuleId, serviceId);
+
+        return isPolicyRuleServiceValid
+                .onItem()
+                .transform(
+                        isPolicyRuleService -> {
+                            if (!isPolicyRuleService) {
+                                return new PolicyRuleState(
+                                        PolicyRuleStateEnum.POLICY_FAILED, String.format(INVALID_MESSAGE, serviceId));
+                            }
 
-        contextService
-                .setPolicyRule(policyRule)
-                .subscribe()
-                .with(id -> validateDevice(policyRuleDevice));
-        return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
+                            return VALIDATED_POLICYRULE_STATE;
+                        });
     }
 
     @Override
@@ -265,153 +393,154 @@ public class PolicyServiceImpl implements PolicyService {
 
         final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
         if (!policyRuleBasic.areArgumentsValid()) {
-            LOGGER.error(policyRuleDevice.getExeceptionMessage());
-            setPolicyRuleDeviceToContext(
-                    policyRuleDevice,
+            final var policyRuleState =
                     new PolicyRuleState(
-                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleBasic.getExeceptionMessage()));
-            return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
+                            PolicyRuleStateEnum.POLICY_FAILED, policyRuleBasic.getExeceptionMessage());
+            return Uni.createFrom().item(policyRuleState);
         }
 
-        policyRuleBasic.setPolicyRuleState(UPDATED_POLICYRULE_STATE);
-        policyRuleDevice.setPolicyRuleBasic(policyRuleBasic);
-        final var policyRuleTypeDevice = new PolicyRuleTypeDevice(policyRuleDevice);
-        final var policyRule = new PolicyRule(policyRuleTypeDevice);
+        final var policyRuleId = policyRuleBasic.getPolicyRuleId();
+        final var isPolicyRuleValid =
+                policyRuleConditionValidator.isUpdatedPolicyRuleIdValid(policyRuleId);
 
-        contextService
-                .setPolicyRule(policyRule)
-                .subscribe()
-                .with(id -> validateUpdatedPolicyDevice(policyRuleDevice));
+        return isPolicyRuleValid
+                .onItem()
+                .transform(
+                        isPolicyRuleService -> {
+                            if (!isPolicyRuleService) {
+                                return new PolicyRuleState(
+                                        PolicyRuleStateEnum.POLICY_FAILED,
+                                        String.format(INVALID_MESSAGE, policyRuleId));
+                            }
 
-        return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
+                            return VALIDATED_POLICYRULE_STATE;
+                        });
     }
 
     @Override
     public Uni<PolicyRuleState> deletePolicy(String policyRuleId) {
         LOGGER.infof("Received %s", policyRuleId);
 
-        PolicyRule policyRule = contextService.getPolicyRule(policyRuleId).await().indefinitely();
-
-        final var policyRuleBasic = policyRule.getPolicyRuleType().getPolicyRuleBasic();
-        List<PolicyRuleCondition> policyRuleConditions = policyRuleBasic.getPolicyRuleConditions();
-
-        for (PolicyRuleCondition policy : policyRuleConditions) {
-            var empty = monitoringService.deleteKpi(policy.getKpiId());
-            empty
-                    .subscribe()
-                    .with(emptyMessage -> LOGGER.infof("Kpi [%s] has been deleted.\n", policyRuleId));
-        }
-
-        var empty = contextService.removePolicyRule(policyRuleId);
-        empty
-                .subscribe()
-                .with(emptyMessage -> LOGGER.infof("Policy [%s] has been removed.\n", policyRuleId));
-
-        setPolicyRuleToContext(policyRule, REMOVED_POLICYRULE_STATE);
-        return Uni.createFrom().item(policyRuleBasic.getPolicyRuleState());
+        final var getPolicyRule = contextService.getPolicyRule(policyRuleId);
+
+        return getPolicyRule
+                .onItem()
+                .transform(
+                        policyRule -> {
+                            var policyRuleBasic = policyRule.getPolicyRuleType().getPolicyRuleBasic();
+
+                            policyRule
+                                    .getPolicyRuleType()
+                                    .getPolicyRuleBasic()
+                                    .setPolicyRuleState(REMOVED_POLICYRULE_STATE);
+
+                            contextService
+                                    .setPolicyRule(policyRule)
+                                    .subscribe()
+                                    .with(
+                                            tmp ->
+                                                    LOGGER.infof(
+                                                            "DeletePolicy with id: " + VALID_MESSAGE,
+                                                            policyRuleBasic.getPolicyRuleId()));
+
+                            return policyRuleBasic.getPolicyRuleState();
+                        });
     }
 
-    private void monitorKpi(List<AlarmDescriptor> alarmDescriptorList) {
-
-        for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) {
-            var monitorKpiRequest =
-                    new MonitorKpiRequest(
-                            alarmDescriptor.getKpiId(), MONITORING_WINDOW_IN_SECONDS, SAMPLING_RATE_PER_SECOND);
-            monitoringService
-                    .monitorKpi(monitorKpiRequest)
-                    .subscribe()
-                    .with(
-                            emptyMessage ->
-                                    LOGGER.infof(
-                                            "Kpi [%s] has started to be monitored.\n", alarmDescriptor.getKpiId()));
+    private Uni<List<Boolean>> returnInvalidDeviceIds(List<String> deviceIds) {
+        UniJoin.Builder<Boolean> builder = Uni.join().builder();
+        for (String deviceId : deviceIds) {
+            final var validatedDeviceId = policyRuleConditionValidator.isDeviceIdValid(deviceId);
+            builder.add(validatedDeviceId);
         }
+        return builder.joinAll().andFailFast();
     }
 
-    private void provisionAlarm(
-            PolicyRule policyRule, List<AlarmDescriptor> alarmDescriptorList, Boolean isService) {
+    private List<AlarmDescriptor> createAlarmDescriptorList(PolicyRule policyRule) {
+        final var policyRuleType = policyRule.getPolicyRuleType();
+        final var policyRuleTypeSpecificType = policyRuleType.getPolicyRuleType();
 
-        List<AlarmSubscription> alarmSubscriptionList = new ArrayList<>();
+        List<AlarmDescriptor> alarmDescriptorList = new ArrayList<>();
+        if (policyRuleTypeSpecificType instanceof PolicyRuleService) {
+            final var policyRuleService = (PolicyRuleService) policyRuleTypeSpecificType;
+            final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
 
-        for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) {
-            monitoringService
-                    .setKpiAlarm(alarmDescriptor)
-                    .subscribe()
-                    .with(alarmId -> alarmSubscriptionList.add(new AlarmSubscription(alarmId, 0, 0)));
-        }
+            alarmDescriptorList = parsePolicyRuleCondition(policyRuleBasic);
+            if (alarmDescriptorList.isEmpty()) {
+                return List.of();
+            }
+        } else {
+            final var policyRuleDevice = (PolicyRuleDevice) policyRuleTypeSpecificType;
+            final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
 
-        setPolicyRuleToContext(policyRule, PROVISIONED_POLICYRULE_STATE);
+            alarmDescriptorList = parsePolicyRuleCondition(policyRuleBasic);
+            if (alarmDescriptorList.isEmpty()) {
+                return List.of();
+            }
+            for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) {
+                alarmPolicyRuleDeviceMap.put(alarmDescriptor.getAlarmId(), policyRuleDevice);
+            }
+        }
 
-        getAlarmResponseStream(policyRule, alarmDescriptorList, alarmSubscriptionList, isService);
+        return alarmDescriptorList;
     }
 
-    private void getAlarmResponseStream(
-            PolicyRule policyRule,
-            List<AlarmDescriptor> alarmDescriptorList,
-            List<AlarmSubscription> alarmSubscriptionList,
-            Boolean isService) {
-
-        List<Multi<AlarmResponse>> alarmResponseStreamList = new ArrayList<>();
-        for (AlarmSubscription alarmSubscription : alarmSubscriptionList) {
-            alarmResponseStreamList.add(monitoringService.getAlarmResponseStream(alarmSubscription));
-        }
-        Multi<AlarmResponse> multi = Multi.createBy().merging().streams(alarmResponseStreamList);
-
+    private void monitorAlarmResponseForService(Multi<AlarmResponse> multi) {
         multi
-                .select()
-                .first()
                 .subscribe()
                 .with(
                         alarmResponse -> {
+                            LOGGER.infof("**************************Received Alarm!**************************");
+                            LOGGER.infof("alarmResponse:");
                             LOGGER.info(alarmResponse);
-                            if (isService) {
-                                if (!alarmPolicyRuleServiceMap.containsKey(alarmResponse.getAlarmId())) {
-                                    return;
-                                }
-                                applyActionService(alarmResponse.getAlarmId());
-                            } else {
-                                if (!alarmPolicyRuleDeviceMap.containsKey(alarmResponse.getAlarmId())) {
-                                    return;
-                                }
-                                applyActionDevice(alarmResponse.getAlarmId());
-                            }
+                            LOGGER.info(alarmResponse.getAlarmId());
+                            applyActionService(alarmResponse.getAlarmId());
                         });
+    }
 
-        Long count =
-                multi
-                        .collect()
-                        .with(Collectors.counting())
-                        .await()
-                        .atMost(Duration.ofMinutes(POLICY_EVALUATION_TIMEOUT));
-
-        if (count > ACCEPTABLE_NUMBER_OF_ALARMS) {
-            for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) {
-                monitoringService
-                        .deleteAlarm(alarmDescriptor.getAlarmId())
-                        .subscribe()
-                        .with(
-                                emptyMessage ->
-                                        LOGGER.infof("Alarm [%s] has been deleted.\n", alarmDescriptor.getAlarmId()));
-            }
-
-            setPolicyRuleToContext(policyRule, INEFFECTIVE_POLICYRULE_STATE);
-
-        } else {
-            setPolicyRuleToContext(policyRule, EFFECTIVE_POLICYRULE_STATE);
-
-            multi
-                    .subscribe()
-                    .with(
-                            alarmResponse -> {
-                                LOGGER.info(alarmResponse);
-                                if (isService) {
-                                    applyActionService(alarmResponse.getAlarmId());
-                                } else {
-                                    applyActionDevice(alarmResponse.getAlarmId());
-                                }
-                            });
-        }
+    private void monitorAlarmResponseForDevice(Multi<AlarmResponse> multi) {
+        multi
+                .subscribe()
+                .with(
+                        alarmResponse -> {
+                            LOGGER.infof("**************************Received Alarm!**************************");
+                            LOGGER.infof("alarmResponse:");
+                            LOGGER.info(alarmResponse);
+                            LOGGER.info(alarmResponse.getAlarmId());
+                            applyActionDevice(alarmResponse.getAlarmId());
+                        });
     }
 
+    // TODO: To be refactored or deprecated
+    //    private void evaluateAction(
+    //            PolicyRule policyRule,
+    //            List<AlarmDescriptor> alarmDescriptorList,
+    //            Multi<AlarmResponse> multi) {
+    //
+    //        Long count =
+    //                multi
+    //                        .collect()
+    //                        .with(Collectors.counting())
+    //                        .await()
+    //                        .atMost(Duration.ofMinutes(POLICY_EVALUATION_TIMEOUT));
+    //
+    //        if (count > ACCEPTABLE_NUMBER_OF_ALARMS) {
+    //            for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) {
+    //                monitoringService
+    //                        .deleteAlarm(alarmDescriptor.getAlarmId())
+    //                        .subscribe()
+    //                        .with(
+    //                                emptyMessage ->
+    //                                        LOGGER.infof(
+    //                                                "Alarm [%s] has been deleted as ineffective.\n",
+    //                                                alarmDescriptor.getAlarmId()));
+    //            }
+    //            setPolicyRuleToContext(policyRule, INEFFECTIVE_POLICYRULE_STATE);
+    //        } else {
+    //            setPolicyRuleToContext(policyRule, EFFECTIVE_POLICYRULE_STATE);
+    //        }
+    //    }
+
     private void applyActionDevice(String alarmId) {
         PolicyRuleDevice policyRuleDevice = alarmPolicyRuleDeviceMap.get(alarmId);
 
@@ -526,190 +655,52 @@ public class PolicyServiceImpl implements PolicyService {
                         });
     }
 
-    private void applyActionService(String alarmId) {
-        PolicyRuleService policyRuleService = alarmPolicyRuleServiceMap.get(alarmId);
-        PolicyRuleAction policyRuleAction = policyRuleActionMap.get(alarmId);
-
-        setPolicyRuleServiceToContext(policyRuleService, ACTIVE_POLICYRULE_STATE);
-
-        switch (policyRuleAction.getPolicyRuleActionEnum()) {
-            case POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT:
-                addServiceConstraint(policyRuleService, policyRuleAction);
-            case POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE:
-                addServiceConfigRule(policyRuleService, policyRuleAction);
-            default:
-                LOGGER.errorf(INVALID_MESSAGE, policyRuleAction.getPolicyRuleActionEnum());
-                return;
-        }
-    }
-
-    private void validateDevice(PolicyRuleDevice policyRuleDevice) {
-        final var deviceIds = policyRuleDevice.getDeviceIds();
-        final var policyRuleId = policyRuleDevice.getPolicyRuleBasic().getPolicyRuleId();
-
-        final var invalidDeviceIds = returnInvalidDeviceIds(deviceIds);
-        if (!invalidDeviceIds.isEmpty()) {
-            String ids = "";
-            for (String id : invalidDeviceIds) {
-                ids += " ," + id;
-            }
-
-            String message =
-                    String.format(
-                            "The following devices in PolicyRuleDevice with ID: %s are not valid: %s",
-                            policyRuleId, ids);
-            setPolicyRuleDeviceToContext(
-                    policyRuleDevice, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
-            return;
-        }
-
-        createAlarmDescriptorsForDevices(policyRuleDevice);
-    }
-
-    private void createAlarmDescriptorsForDevices(PolicyRuleDevice policyRuleDevice) {
-        final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
-
-        List<AlarmDescriptor> alarmDescriptorList =
-                parsePolicyRuleCondition(policyRuleDevice.getPolicyRuleBasic());
-
-        if (alarmDescriptorList.isEmpty()) {
-            String message =
-                    String.format(
-                            "The devices of PolicyRuleDevice with ID: %s are not valid",
-                            policyRuleBasic.getPolicyRuleId());
-            setPolicyRuleDeviceToContext(
-                    policyRuleDevice, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
-            return;
-        }
-
-        setPolicyRuleDeviceToContext(policyRuleDevice, VALIDATED_POLICYRULE_STATE);
-        for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) {
-            alarmPolicyRuleDeviceMap.put(alarmDescriptor.getAlarmId(), policyRuleDevice);
-        }
-
-        final var policyRuleTypeService = new PolicyRuleTypeDevice(policyRuleDevice);
-        final var policyRule = new PolicyRule(policyRuleTypeService);
-        monitorKpi(alarmDescriptorList);
-        provisionAlarm(policyRule, alarmDescriptorList, false);
-        return;
-    }
-
-    private void validateUpdatedPolicyService(PolicyRuleService policyRuleService) {
-
-        final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
-        final var isUpdatedPolicyRuleValid =
-                policyRuleConditionValidator.validateUpdatedPolicyRuleId(policyRuleBasic.getPolicyRuleId());
-
-        isUpdatedPolicyRuleValid
-                .subscribe()
-                .with(
-                        policyRuleBoolean -> {
-                            if (Boolean.FALSE.equals(policyRuleBoolean)) {
-
-                                String message =
-                                        String.format(
-                                                "The PolicyRule with ID: %s was not found. PolicyUpdateService failed.",
-                                                policyRuleBasic.getPolicyRuleId());
-                                setPolicyRuleServiceToContext(
-                                        policyRuleService,
-                                        new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
-                                return;
-                            }
-
-                            validateService(policyRuleService);
-                        });
-    }
-
-    private void validateUpdatedPolicyDevice(PolicyRuleDevice policyRuleDevice) {
+    private void callRecalculatePathRPC(
+            PolicyRuleService policyRuleService, PolicyRuleAction policyRuleAction) {
 
-        final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
-        final var isUpdatedPolicyRuleValid =
-                policyRuleConditionValidator.validateUpdatedPolicyRuleId(policyRuleBasic.getPolicyRuleId());
+        final var deserializedServiceUni = contextService.getService(policyRuleService.getServiceId());
 
-        isUpdatedPolicyRuleValid
+        deserializedServiceUni
                 .subscribe()
                 .with(
-                        policyRuleBoolean -> {
-                            if (Boolean.FALSE.equals(policyRuleBoolean)) {
-                                String message =
-                                        String.format(
-                                                "PolicyRule with ID: %s was not found. PolicyUpdateDevice failed",
-                                                policyRuleBasic.getPolicyRuleId());
-                                setPolicyRuleDeviceToContext(
-                                        policyRuleDevice,
-                                        new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
-                                return;
-                            }
-                            validateDevice(policyRuleDevice);
+                        deserializedService -> {
+                            serviceService
+                                    .recomputeConnections(deserializedService)
+                                    .subscribe()
+                                    .with(
+                                            x -> {
+                                                LOGGER.info("called recomputeConnections with:");
+                                                LOGGER.info(deserializedService);
+                                                setPolicyRuleServiceToContext(policyRuleService, ENFORCED_POLICYRULE_STATE);
+                                            });
                         });
     }
 
-    private void validateService(PolicyRuleService policyRuleService) {
-        final var serviceId = policyRuleService.getServiceId();
-        final var deviceIds = policyRuleService.getDeviceIds();
-        final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
-
-        Boolean isServiceIdValid =
-                policyRuleConditionValidator.validateServiceId(serviceId).await().indefinitely();
-
-        if (!isServiceIdValid) {
-            String message =
-                    String.format(
-                            "Cannot provision/update a PolicyRule with invalid service ID: %s",
-                            policyRuleBasic.getPolicyRuleId());
-            setPolicyRuleServiceToContext(
-                    policyRuleService, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
-            return;
-        }
-
-        Boolean isServicesDeviceIdsValid =
-                policyRuleConditionValidator
-                        .isServicesDeviceIdsValid(serviceId, deviceIds)
-                        .await()
-                        .indefinitely();
-
-        if (!isServicesDeviceIdsValid) {
-
-            String message =
-                    String.format(
-                            "Cannot provision/update a PolicyRule with invalid service ID: %s",
-                            policyRuleBasic.getPolicyRuleId());
-            setPolicyRuleServiceToContext(
-                    policyRuleService, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
-            return;
-        }
-
-        setPolicyRuleServiceToContext(policyRuleService, VALIDATED_POLICYRULE_STATE);
-
-        createAlarmDescriptorsForService(policyRuleService);
-    }
-
-    private void createAlarmDescriptorsForService(PolicyRuleService policyRuleService) {
-        final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
-
-        List<AlarmDescriptor> alarmDescriptorList =
-                parsePolicyRuleCondition(policyRuleService.getPolicyRuleBasic());
-
-        if (alarmDescriptorList.isEmpty()) {
-            String message =
-                    String.format(
-                            "Invalid PolicyRuleConditions in PolicyRule with ID: %s",
-                            policyRuleBasic.getPolicyRuleId());
-            setPolicyRuleServiceToContext(
-                    policyRuleService, new PolicyRuleState(PolicyRuleStateEnum.POLICY_FAILED, message));
-            return;
-        }
-
-        setPolicyRuleServiceToContext(policyRuleService, VALIDATED_POLICYRULE_STATE);
-
-        for (AlarmDescriptor alarmDescriptor : alarmDescriptorList) {
-            alarmPolicyRuleServiceMap.put(alarmDescriptor.getAlarmId(), policyRuleService);
+    private void applyActionService(String alarmId) {
+        PolicyRuleService policyRuleService = alarmPolicyRuleServiceMap.get(alarmId);
+        PolicyRuleAction policyRuleAction =
+                policyRuleService.getPolicyRuleBasic().getPolicyRuleActions().get(0);
+
+        if (noAlarms == 0) {
+            noAlarms++;
+            setPolicyRuleServiceToContext(policyRuleService, ACTIVE_POLICYRULE_STATE);
+
+            switch (policyRuleAction.getPolicyRuleActionEnum()) {
+                case POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT:
+                    addServiceConstraint(policyRuleService, policyRuleAction);
+                case POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE:
+                    addServiceConfigRule(policyRuleService, policyRuleAction);
+                case POLICY_RULE_ACTION_RECALCULATE_PATH:
+                    callRecalculatePathRPC(policyRuleService, policyRuleAction);
+                default:
+                    LOGGER.errorf(INVALID_MESSAGE, policyRuleAction.getPolicyRuleActionEnum());
+                    return;
+            }
+        } else if (noAlarms == 2) {
+            noAlarms = 0;
+        } else {
+            noAlarms++;
         }
-
-        final var policyRuleTypeService = new PolicyRuleTypeService(policyRuleService);
-        final var policyRule = new PolicyRule(policyRuleTypeService);
-        provisionAlarm(policyRule, alarmDescriptorList, true);
-        return;
     }
 
     private List<AlarmDescriptor> parsePolicyRuleCondition(PolicyRuleBasic policyRuleBasic) {
@@ -833,16 +824,16 @@ public class PolicyServiceImpl implements PolicyService {
                         false);
 
             case POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN:
-                return new KpiValueRange(policyRuleCondition.getKpiValue(), null, false, false, false);
+                return new KpiValueRange(null, policyRuleCondition.getKpiValue(), true, false, false);
 
             case POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL:
-                return new KpiValueRange(policyRuleCondition.getKpiValue(), null, false, true, false);
+                return new KpiValueRange(null, policyRuleCondition.getKpiValue(), true, true, false);
 
             case POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN:
-                return new KpiValueRange(null, policyRuleCondition.getKpiValue(), false, false, false);
+                return new KpiValueRange(policyRuleCondition.getKpiValue(), null, true, false, false);
 
             case POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL:
-                return new KpiValueRange(null, policyRuleCondition.getKpiValue(), false, false, true);
+                return new KpiValueRange(policyRuleCondition.getKpiValue(), null, true, false, true);
             default:
                 return null;
         }
@@ -885,31 +876,6 @@ public class PolicyServiceImpl implements PolicyService {
         return new KpiValueRange(kpiMinValue, kpiMaxValue, true, includeMinValue, includeMaxValue);
     }
 
-    private List<String> returnInvalidDeviceIds(List<String> deviceIds) {
-        var invalidDeviceIds = new ArrayList<String>();
-
-        if (!deviceIds.isEmpty()) {
-
-            for (String deviceId : deviceIds) {
-                final var validatedDeviceId = policyRuleConditionValidator.validateDeviceId(deviceId);
-
-                validatedDeviceId
-                        .subscribe()
-                        .with(
-                                deviceIdBoolean -> {
-                                    if (Boolean.FALSE.equals(deviceIdBoolean)) {
-                                        invalidDeviceIds.add(deviceId);
-                                    }
-                                });
-            }
-
-        } else {
-            LOGGER.warnf("No deviceIds found");
-        }
-
-        return invalidDeviceIds;
-    }
-
     private void setPolicyRuleToContext(PolicyRule policyRule, PolicyRuleState policyRuleState) {
         final var policyRuleType = policyRule.getPolicyRuleType();
         final var policyRuleTypeSpecificType = policyRuleType.getPolicyRuleType();
diff --git a/src/policy/src/main/java/eu/teraflow/policy/Serializer.java b/src/policy/src/main/java/eu/teraflow/policy/Serializer.java
index 52d594ea4200c2ce4d775edf2f06cf7a9c9f9097..5a95f0e6edd200251a27b1e3571b719ebd102e1b 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/Serializer.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/Serializer.java
@@ -1557,8 +1557,21 @@ public class Serializer {
         final var kpiValueMin = kpiValueRange.getKpiMinValue();
         final var kpiValueMax = kpiValueRange.getKpiMaxValue();
 
-        final var serializedKpiValueMin = serialize(kpiValueMin);
-        final var serializedKpiValueMax = serialize(kpiValueMax);
+        Monitoring.KpiValue serializedKpiValueMin;
+        Monitoring.KpiValue serializedKpiValueMax;
+
+        if (kpiValueMin == null && kpiValueMax == null) {
+            throw new IllegalStateException("KPI value max and min cannot be both null");
+        } else if (kpiValueMax == null) {
+            serializedKpiValueMin = serialize(kpiValueMin);
+            serializedKpiValueMax = serialize(new StringKpiValue("NaN"));
+        } else if (kpiValueMin == null) {
+            serializedKpiValueMin = serialize(new StringKpiValue("NaN"));
+            serializedKpiValueMax = serialize(kpiValueMax);
+        } else {
+            serializedKpiValueMin = serialize(kpiValueMin);
+            serializedKpiValueMax = serialize(kpiValueMax);
+        }
 
         builder.setKpiMinValue(serializedKpiValueMin);
         builder.setKpiMaxValue(serializedKpiValueMax);
@@ -1824,6 +1837,10 @@ public class Serializer {
                 return PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT;
             case POLICY_RULE_ACTION_NO_ACTION:
                 return PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_NO_ACTION;
+            case POLICY_RULE_ACTION_CALL_SERVICE_RPC:
+                return PolicyAction.PolicyRuleActionEnum.POLICY_RULE_ACTION_CALL_SERVICE_RPC;
+            case POLICY_RULE_ACTION_RECALCULATE_PATH:
+                return PolicyAction.PolicyRuleActionEnum.POLICY_RULE_ACTION_RECALCULATE_PATH;
             default:
                 return PolicyAction.PolicyRuleActionEnum.UNRECOGNIZED;
         }
@@ -1838,6 +1855,10 @@ public class Serializer {
                 return PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE;
             case POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT:
                 return PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT;
+            case POLICY_RULE_ACTION_CALL_SERVICE_RPC:
+                return PolicyRuleActionEnum.POLICY_RULE_ACTION_CALL_SERVICE_RPC;
+            case POLICY_RULE_ACTION_RECALCULATE_PATH:
+                return PolicyRuleActionEnum.POLICY_RULE_ACTION_RECALCULATE_PATH;
             case POLICYRULE_ACTION_NO_ACTION:
             case UNRECOGNIZED:
             default:
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ServiceStatusEnum.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ServiceStatusEnum.java
index 0a9115acd7cec634d1a4cf6dd096bf44adab141e..353b78eba1ad261d6c65561d1fe3e4f64a914420 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/context/model/ServiceStatusEnum.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ServiceStatusEnum.java
@@ -20,5 +20,7 @@ public enum ServiceStatusEnum {
     UNDEFINED,
     PLANNED,
     ACTIVE,
-    PENDING_REMOVAL
+    PENDING_REMOVAL,
+    SLA_VIOLATED,
+    UPDATING
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleActionEnum.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleActionEnum.java
index 432c3834c1c2f3417540bb4e62d43a1dfc58a167..971dfbaf29bba86ce0043e2edc6bb1e21f181643 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleActionEnum.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleActionEnum.java
@@ -20,5 +20,8 @@ public enum PolicyRuleActionEnum {
     POLICY_RULE_ACTION_NO_ACTION,
     POLICY_RULE_ACTION_SET_DEVICE_STATUS,
     POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE,
-    POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT
+    POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT,
+    POLICY_RULE_ACTION_CALL_SERVICE_RPC,
+    // This is temporary
+    POLICY_RULE_ACTION_RECALCULATE_PATH
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmSubscription.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmSubscription.java
index 532eed60868dfbd5fe1996c781964d3d49a368af..7b99c20456987b6c56a0af00821fb5ef33954ada 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmSubscription.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmSubscription.java
@@ -22,6 +22,7 @@ public class AlarmSubscription {
     private final float subscriptionTimeoutS;
     private final float subscriptionFrequencyMs;
 
+    // TODO: Refactor the AlarmSubscription constructor to allow infinite subscriptionTimeoutS
     public AlarmSubscription(
             String alarmId, float subscriptionTimeoutS, float subscriptionFrequencyMs) {
         this.alarmId = alarmId;
diff --git a/src/policy/src/main/java/eu/teraflow/policy/service/ServiceGateway.java b/src/policy/src/main/java/eu/teraflow/policy/service/ServiceGateway.java
index a7483f4f62ac798932ea64a3351536ffb4e5155d..b8764efe312bae8b395beb3a22b1d2a57346b37d 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/service/ServiceGateway.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/service/ServiceGateway.java
@@ -16,6 +16,7 @@
 
 package eu.teraflow.policy.service;
 
+import eu.teraflow.policy.context.model.Empty;
 import eu.teraflow.policy.context.model.Service;
 import eu.teraflow.policy.context.model.ServiceId;
 import io.smallrye.mutiny.Uni;
@@ -23,4 +24,6 @@ import io.smallrye.mutiny.Uni;
 public interface ServiceGateway {
 
     Uni<ServiceId> updateService(Service service);
+
+    Uni<Empty> recomputeConnections(Service service);
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/service/ServiceGatewayImpl.java b/src/policy/src/main/java/eu/teraflow/policy/service/ServiceGatewayImpl.java
index d59330fd2b756749c333e70547989bb443bd19d8..f8f38f7520f608b52f432e41b96e46448234a68e 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/service/ServiceGatewayImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/service/ServiceGatewayImpl.java
@@ -17,16 +17,19 @@
 package eu.teraflow.policy.service;
 
 import eu.teraflow.policy.Serializer;
+import eu.teraflow.policy.context.model.Empty;
 import eu.teraflow.policy.context.model.Service;
 import eu.teraflow.policy.context.model.ServiceId;
 import io.quarkus.grpc.GrpcClient;
 import io.smallrye.mutiny.Uni;
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
+import org.jboss.logging.Logger;
 import service.MutinyServiceServiceGrpc.MutinyServiceServiceStub;
 
 @ApplicationScoped
 public class ServiceGatewayImpl implements ServiceGateway {
+    private static final Logger LOGGER = Logger.getLogger(ServiceGatewayImpl.class);
 
     @GrpcClient("service")
     MutinyServiceServiceStub streamingDelegateService;
@@ -47,4 +50,23 @@ public class ServiceGatewayImpl implements ServiceGateway {
                 .onItem()
                 .transform(serializer::deserialize);
     }
+
+    @Override
+    public Uni<Empty> recomputeConnections(Service service) {
+        service.getServiceEndPointIds().clear();
+        service.getServiceConstraints().clear();
+        final var serializedService = serializer.serialize(service);
+        LOGGER.info(serializedService);
+
+        return streamingDelegateService
+                .recomputeConnections(serializedService)
+                .onItem()
+                .transform(serializer::deserializeEmpty)
+                .onFailure()
+                .invoke(
+                        x -> {
+                            LOGGER.info("recomputeConnections failed with:");
+                            LOGGER.info(x);
+                        });
+    }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/service/ServiceService.java b/src/policy/src/main/java/eu/teraflow/policy/service/ServiceService.java
index bbf91aff0c7ffeeb3f262fa3cebd582acda74502..aa4411ee9d79ea56c3d6f5b901f92b0125fe4b00 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/service/ServiceService.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/service/ServiceService.java
@@ -16,6 +16,7 @@
 
 package eu.teraflow.policy.service;
 
+import eu.teraflow.policy.context.model.Empty;
 import eu.teraflow.policy.context.model.Service;
 import eu.teraflow.policy.context.model.ServiceId;
 import io.smallrye.mutiny.Uni;
@@ -23,4 +24,6 @@ import io.smallrye.mutiny.Uni;
 public interface ServiceService {
 
     Uni<ServiceId> updateService(Service service);
+
+    Uni<Empty> recomputeConnections(Service service);
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/service/ServiceServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/service/ServiceServiceImpl.java
index 74728924f70070e7651ac1af4ad75aba8b325c0e..109bcba261d4464313d5b6f21ee2bdde76b17879 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/service/ServiceServiceImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/service/ServiceServiceImpl.java
@@ -16,6 +16,7 @@
 
 package eu.teraflow.policy.service;
 
+import eu.teraflow.policy.context.model.Empty;
 import eu.teraflow.policy.context.model.Service;
 import eu.teraflow.policy.context.model.ServiceId;
 import io.smallrye.mutiny.Uni;
@@ -36,4 +37,9 @@ public class ServiceServiceImpl implements ServiceService {
     public Uni<ServiceId> updateService(Service service) {
         return serviceGateway.updateService(service);
     }
+
+    @Override
+    public Uni<Empty> recomputeConnections(Service service) {
+        return serviceGateway.recomputeConnections(service);
+    }
 }
diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java
index 057906d6528a165bdd9c958e8339ac8f5d59cc25..95819965e77a4ba61d13ee240594e37c1eb4cd74 100644
--- a/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java
+++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyRuleServiceValidationTest.java
@@ -17,8 +17,25 @@
 package eu.teraflow.policy;
 
 import static org.assertj.core.api.Assertions.assertThat;
-
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.when;
+
+import eu.teraflow.policy.context.ContextService;
+import eu.teraflow.policy.context.model.ConfigActionEnum;
+import eu.teraflow.policy.context.model.ConfigRule;
+import eu.teraflow.policy.context.model.ConfigRuleCustom;
+import eu.teraflow.policy.context.model.ConfigRuleTypeCustom;
+import eu.teraflow.policy.context.model.Device;
+import eu.teraflow.policy.context.model.DeviceConfig;
+import eu.teraflow.policy.context.model.DeviceDriverEnum;
+import eu.teraflow.policy.context.model.DeviceOperationalStatus;
+import eu.teraflow.policy.context.model.EndPoint.EndPointBuilder;
+import eu.teraflow.policy.context.model.EndPointId;
+import eu.teraflow.policy.context.model.Location;
+import eu.teraflow.policy.context.model.LocationTypeRegion;
 import eu.teraflow.policy.context.model.ServiceId;
+import eu.teraflow.policy.context.model.TopologyId;
+import eu.teraflow.policy.kpi_sample_types.model.KpiSampleType;
 import eu.teraflow.policy.model.BooleanOperator;
 import eu.teraflow.policy.model.NumericalOperator;
 import eu.teraflow.policy.model.PolicyRuleAction;
@@ -32,13 +49,84 @@ import eu.teraflow.policy.model.PolicyRuleStateEnum;
 import eu.teraflow.policy.monitoring.model.IntegerKpiValue;
 import eu.teraflow.policy.monitoring.model.KpiValue;
 import io.quarkus.test.junit.QuarkusTest;
+import io.smallrye.mutiny.Uni;
 import java.util.Collections;
 import java.util.List;
 import java.util.UUID;
+import javax.inject.Inject;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
 
 @QuarkusTest
 class PolicyRuleServiceValidationTest {
+    @Inject Serializer serializer;
+
+    private ContextService contextService;
+    private PolicyRuleConditionValidator policyRuleConditionValidator;
+
+    @BeforeEach
+    void setUp() {
+        contextService = Mockito.mock(ContextService.class);
+        policyRuleConditionValidator = new PolicyRuleConditionValidator(contextService);
+    }
+
+    @Test
+    void testIsDeviceIdValidReturnsTrue() {
+        String deviceId = "deviceId";
+        Device device = createDevice(deviceId);
+
+        when(contextService.getDevice(anyString())).thenReturn(Uni.createFrom().item(device));
+
+        Boolean result = policyRuleConditionValidator.isDeviceIdValid(deviceId).await().indefinitely();
+
+        assertThat(result).isEqualTo(true);
+    }
+
+    @Test
+    void testIsDeviceIdValidReturnsFalse() {
+        String deviceId = "deviceId";
+
+        when(contextService.getDevice(anyString()))
+                .thenReturn(Uni.createFrom().failure(new RuntimeException("Failure")));
+
+        Boolean result = policyRuleConditionValidator.isDeviceIdValid(deviceId).await().indefinitely();
+
+        assertThat(result).isEqualTo(false);
+    }
+
+    Device createDevice(String deviceId) {
+
+        final var configRuleCustom = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
+        final var configRuleType = new ConfigRuleTypeCustom(configRuleCustom);
+        final var deviceConfig =
+                new DeviceConfig(List.of(new ConfigRule(ConfigActionEnum.SET, configRuleType)));
+
+        final var deviceDrivers = List.of(DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.P4);
+
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var endPointType = "endPointType";
+        final var kpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+        final var locationTypeRegion = new LocationTypeRegion("ATH");
+        final var location = new Location(locationTypeRegion);
+        final var endPoint =
+                new EndPointBuilder(endPointId, endPointType, kpiSampleTypes).location(location).build();
+
+        final var endPoints = List.of(endPoint);
+
+        return new Device(
+                deviceId,
+                "deviceType",
+                deviceConfig,
+                DeviceOperationalStatus.ENABLED,
+                deviceDrivers,
+                endPoints);
+    }
 
     private List<PolicyRuleCondition> createPolicyRuleConditions(
             String kpiId, NumericalOperator numericalOperator, KpiValue<?> kpiValue) {
diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
index eb7f4b96097efc7ed72c38051c9308a8db4413a0..2f5266c9591144fe4ab70bf38f7cc3943ef4cdd9 100644
--- a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
+++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
@@ -146,72 +146,79 @@ class PolicyServiceTest {
                 .build();
     }
 
-    @Test
-    void shouldAddPolicyService() throws ExecutionException, InterruptedException, TimeoutException {
-        CompletableFuture<String> message = new CompletableFuture<>();
-
-        final var policyRuleBasic = createPolicyRuleBasic();
+    // @Test
+    // void shouldAddPolicyService() throws ExecutionException, InterruptedException, TimeoutException
+    // {
+    //    CompletableFuture<String> message = new CompletableFuture<>();
 
-        final var expectedPolicyRuleState = policyRuleBasic.getPolicyRuleState();
+    //    final var policyRuleBasic = createPolicyRuleBasic();
 
-        final var serviceId = createContextServiceId();
+    //    final var expectedPolicyRuleState = policyRuleBasic.getPolicyRuleState();
 
-        final var expectedDeviceIdUuid1 =
-                serializer.serializeUuid("20db867c-772d-4872-9179-244ecafb3257");
+    //    final var serviceId = createContextServiceId();
 
-        final var expectedDeviceId1 =
-                ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(expectedDeviceIdUuid1).build();
-
-        final var deviceIds = List.of(expectedDeviceId1);
-        final var policyRuleService =
-                Policy.PolicyRuleService.newBuilder()
-                        .setPolicyRuleBasic(policyRuleBasic)
-                        .setServiceId(serviceId)
-                        .addAllDeviceList(deviceIds)
-                        .build();
+    //    final var expectedDeviceIdUuid1 =
+    //            serializer.serializeUuid("20db867c-772d-4872-9179-244ecafb3257");
 
-        client
-                .policyAddService(policyRuleService)
-                .subscribe()
-                .with(policyRuleState -> message.complete(policyRuleState.getPolicyRuleState().toString()));
+    //    final var expectedDeviceId1 =
+    //
+    // ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(expectedDeviceIdUuid1).build();
+
+    //    final var deviceIds = List.of(expectedDeviceId1);
+    //    final var policyRuleService =
+    //            Policy.PolicyRuleService.newBuilder()
+    //                    .setPolicyRuleBasic(policyRuleBasic)
+    //                    .setServiceId(serviceId)
+    //                    .addAllDeviceList(deviceIds)
+    //                    .build();
+
+    //    client
+    //            .policyAddService(policyRuleService)
+    //            .subscribe()
+    //            .with(policyRuleState ->
+    // message.complete(policyRuleState.getPolicyRuleState().toString()));
 
-        assertThat(message.get(5, TimeUnit.SECONDS))
-                .isEqualTo(expectedPolicyRuleState.getPolicyRuleState().toString());
-    }
+    //    assertThat(message.get(5, TimeUnit.SECONDS))
+    //            .isEqualTo(expectedPolicyRuleState.getPolicyRuleState().toString());
+    // }
 
-    @Test
-    void shouldAddPolicyDevice() throws ExecutionException, InterruptedException, TimeoutException {
-        CompletableFuture<String> message = new CompletableFuture<>();
+    // @Test
+    // void shouldAddPolicyDevice() throws ExecutionException, InterruptedException, TimeoutException
+    // {
+    //    CompletableFuture<String> message = new CompletableFuture<>();
 
-        final var expectedDeviceIdUuid1 =
-                serializer.serializeUuid("20db867c-772d-4872-9179-244ecafb3257");
-        final var expectedDeviceIdUuid2 =
-                serializer.serializeUuid("095974ac-d757-412d-b317-bcf355220aa9");
+    //    final var expectedDeviceIdUuid1 =
+    //            serializer.serializeUuid("20db867c-772d-4872-9179-244ecafb3257");
+    //    final var expectedDeviceIdUuid2 =
+    //            serializer.serializeUuid("095974ac-d757-412d-b317-bcf355220aa9");
 
-        final var expectedDeviceId1 =
-                ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(expectedDeviceIdUuid1).build();
-        final var expectedDeviceId2 =
-                ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(expectedDeviceIdUuid2).build();
+    //    final var expectedDeviceId1 =
+    //
+    // ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(expectedDeviceIdUuid1).build();
+    //    final var expectedDeviceId2 =
+    //
+    // ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(expectedDeviceIdUuid2).build();
 
-        final var policyRuleBasic = createPolicyRuleBasic();
-        final var deviceIds = List.of(expectedDeviceId1, expectedDeviceId2);
+    //    final var policyRuleBasic = createPolicyRuleBasic();
+    //    final var deviceIds = List.of(expectedDeviceId1, expectedDeviceId2);
 
-        final var expectedPolicyRuleState = policyRuleBasic.getPolicyRuleState();
+    //    final var expectedPolicyRuleState = policyRuleBasic.getPolicyRuleState();
 
-        final var policyRuleDevice =
-                Policy.PolicyRuleDevice.newBuilder()
-                        .setPolicyRuleBasic(policyRuleBasic)
-                        .addAllDeviceList(deviceIds)
-                        .build();
+    //    final var policyRuleDevice =
+    //            Policy.PolicyRuleDevice.newBuilder()
+    //                    .setPolicyRuleBasic(policyRuleBasic)
+    //                    .addAllDeviceList(deviceIds)
+    //                    .build();
 
-        client
-                .policyAddDevice(policyRuleDevice)
-                .subscribe()
-                .with(policyRuleState -> message.complete(policyRuleState.getPolicyRuleState().toString()));
+    //    client
+    //            .policyAddDevice(policyRuleDevice)
+    //            .subscribe()
+    //            .with(policyRuleState ->
+    // message.complete(policyRuleState.getPolicyRuleState().toString()));
 
-        assertThat(message.get(5, TimeUnit.SECONDS))
-                .isEqualTo(expectedPolicyRuleState.getPolicyRuleState().toString());
-    }
+    //    assertThat(message.get(5, TimeUnit.SECONDS))
+    //            .isEqualTo(expectedPolicyRuleState.getPolicyRuleState().toString());
+    // }
 
     @Test
     void shouldUpdatePolicyServiceReturnFailedState()
diff --git a/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java
index f06c30204b874cd6be30cd1a906c5087412e9640..32055a1820365ffc0f048fa70e99df5f3369fd81 100644
--- a/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java
+++ b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java
@@ -4,7 +4,7 @@
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
-*provideKpiValueRanges
+*
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
@@ -1914,8 +1914,7 @@ class SerializerTest {
                         ServiceStatusEnum.SLA_VIOLATED,
                         ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_SLA_VIOLATED),
                 Arguments.of(
-                        ServiceStatusEnum.UPDATING,
-                        ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UPDATING),
+                        ServiceStatusEnum.UPDATING, ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UPDATING),
                 Arguments.of(
                         ServiceStatusEnum.UNDEFINED,
                         ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED));
diff --git a/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java b/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java
index 53252341b30dc093c79d5a54baf98b82e6a24b75..fa74d7c132eb2753ee941f5eacca7a564424288e 100644
--- a/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java
+++ b/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java
@@ -571,13 +571,17 @@ public final class ContextOuterClass {
      */
     SERVICESTATUS_ACTIVE(2),
     /**
-     * <code>SERVICESTATUS_PENDING_REMOVAL = 3;</code>
+     * <code>SERVICESTATUS_UPDATING = 3;</code>
      */
-    SERVICESTATUS_PENDING_REMOVAL(3),
+    SERVICESTATUS_UPDATING(3),
     /**
-     * <code>SERVICESTATUS_SLA_VIOLATED = 4;</code>
+     * <code>SERVICESTATUS_PENDING_REMOVAL = 4;</code>
      */
-    SERVICESTATUS_SLA_VIOLATED(4),
+    SERVICESTATUS_PENDING_REMOVAL(4),
+    /**
+     * <code>SERVICESTATUS_SLA_VIOLATED = 5;</code>
+     */
+    SERVICESTATUS_SLA_VIOLATED(5),
     UNRECOGNIZED(-1),
     ;
 
@@ -594,13 +598,17 @@ public final class ContextOuterClass {
      */
     public static final int SERVICESTATUS_ACTIVE_VALUE = 2;
     /**
-     * <code>SERVICESTATUS_PENDING_REMOVAL = 3;</code>
+     * <code>SERVICESTATUS_UPDATING = 3;</code>
+     */
+    public static final int SERVICESTATUS_UPDATING_VALUE = 3;
+    /**
+     * <code>SERVICESTATUS_PENDING_REMOVAL = 4;</code>
      */
-    public static final int SERVICESTATUS_PENDING_REMOVAL_VALUE = 3;
+    public static final int SERVICESTATUS_PENDING_REMOVAL_VALUE = 4;
     /**
-     * <code>SERVICESTATUS_SLA_VIOLATED = 4;</code>
+     * <code>SERVICESTATUS_SLA_VIOLATED = 5;</code>
      */
-    public static final int SERVICESTATUS_SLA_VIOLATED_VALUE = 4;
+    public static final int SERVICESTATUS_SLA_VIOLATED_VALUE = 5;
 
 
     public final int getNumber() {
@@ -630,8 +638,9 @@ public final class ContextOuterClass {
         case 0: return SERVICESTATUS_UNDEFINED;
         case 1: return SERVICESTATUS_PLANNED;
         case 2: return SERVICESTATUS_ACTIVE;
-        case 3: return SERVICESTATUS_PENDING_REMOVAL;
-        case 4: return SERVICESTATUS_SLA_VIOLATED;
+        case 3: return SERVICESTATUS_UPDATING;
+        case 4: return SERVICESTATUS_PENDING_REMOVAL;
+        case 5: return SERVICESTATUS_SLA_VIOLATED;
         default: return null;
       }
     }
@@ -3985,65 +3994,101 @@ public final class ContextOuterClass {
     context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
 
     /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     * <code>string name = 2;</code>
+     * @return The name.
+     */
+    java.lang.String getName();
+    /**
+     * <code>string name = 2;</code>
+     * @return The bytes for name.
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 3;</code>
      */
     java.util.List<context.ContextOuterClass.TopologyId> 
         getTopologyIdsList();
     /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     * <code>repeated .context.TopologyId topology_ids = 3;</code>
      */
     context.ContextOuterClass.TopologyId getTopologyIds(int index);
     /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     * <code>repeated .context.TopologyId topology_ids = 3;</code>
      */
     int getTopologyIdsCount();
     /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     * <code>repeated .context.TopologyId topology_ids = 3;</code>
      */
     java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
         getTopologyIdsOrBuilderList();
     /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     * <code>repeated .context.TopologyId topology_ids = 3;</code>
      */
     context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
         int index);
 
     /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     * <code>repeated .context.ServiceId service_ids = 4;</code>
      */
     java.util.List<context.ContextOuterClass.ServiceId> 
         getServiceIdsList();
     /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     * <code>repeated .context.ServiceId service_ids = 4;</code>
      */
     context.ContextOuterClass.ServiceId getServiceIds(int index);
     /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     * <code>repeated .context.ServiceId service_ids = 4;</code>
      */
     int getServiceIdsCount();
     /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     * <code>repeated .context.ServiceId service_ids = 4;</code>
      */
     java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
         getServiceIdsOrBuilderList();
     /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     * <code>repeated .context.ServiceId service_ids = 4;</code>
      */
     context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
         int index);
 
     /**
-     * <code>.context.TeraFlowController controller = 4;</code>
+     * <code>repeated .context.SliceId slice_ids = 5;</code>
+     */
+    java.util.List<context.ContextOuterClass.SliceId> 
+        getSliceIdsList();
+    /**
+     * <code>repeated .context.SliceId slice_ids = 5;</code>
+     */
+    context.ContextOuterClass.SliceId getSliceIds(int index);
+    /**
+     * <code>repeated .context.SliceId slice_ids = 5;</code>
+     */
+    int getSliceIdsCount();
+    /**
+     * <code>repeated .context.SliceId slice_ids = 5;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+        getSliceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.SliceId slice_ids = 5;</code>
+     */
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>.context.TeraFlowController controller = 6;</code>
      * @return Whether the controller field is set.
      */
     boolean hasController();
     /**
-     * <code>.context.TeraFlowController controller = 4;</code>
+     * <code>.context.TeraFlowController controller = 6;</code>
      * @return The controller.
      */
     context.ContextOuterClass.TeraFlowController getController();
     /**
-     * <code>.context.TeraFlowController controller = 4;</code>
+     * <code>.context.TeraFlowController controller = 6;</code>
      */
     context.ContextOuterClass.TeraFlowControllerOrBuilder getControllerOrBuilder();
   }
@@ -4060,8 +4105,10 @@ public final class ContextOuterClass {
       super(builder);
     }
     private Context() {
+      name_ = "";
       topologyIds_ = java.util.Collections.emptyList();
       serviceIds_ = java.util.Collections.emptyList();
+      sliceIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
@@ -4109,6 +4156,12 @@ public final class ContextOuterClass {
               break;
             }
             case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              name_ = s;
+              break;
+            }
+            case 26: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                 topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>();
                 mutable_bitField0_ |= 0x00000001;
@@ -4117,7 +4170,7 @@ public final class ContextOuterClass {
                   input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry));
               break;
             }
-            case 26: {
+            case 34: {
               if (!((mutable_bitField0_ & 0x00000002) != 0)) {
                 serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
                 mutable_bitField0_ |= 0x00000002;
@@ -4126,7 +4179,16 @@ public final class ContextOuterClass {
                   input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
               break;
             }
-            case 34: {
+            case 42: {
+              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
+                sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              sliceIds_.add(
+                  input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry));
+              break;
+            }
+            case 50: {
               context.ContextOuterClass.TeraFlowController.Builder subBuilder = null;
               if (controller_ != null) {
                 subBuilder = controller_.toBuilder();
@@ -4160,6 +4222,9 @@ public final class ContextOuterClass {
         if (((mutable_bitField0_ & 0x00000002) != 0)) {
           serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
         }
+        if (((mutable_bitField0_ & 0x00000004) != 0)) {
+          sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
@@ -4203,17 +4268,55 @@ public final class ContextOuterClass {
       return getContextId();
     }
 
-    public static final int TOPOLOGY_IDS_FIELD_NUMBER = 2;
+    public static final int NAME_FIELD_NUMBER = 2;
+    private volatile java.lang.Object name_;
+    /**
+     * <code>string name = 2;</code>
+     * @return The name.
+     */
+    @java.lang.Override
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        name_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string name = 2;</code>
+     * @return The bytes for name.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int TOPOLOGY_IDS_FIELD_NUMBER = 3;
     private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_;
     /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     * <code>repeated .context.TopologyId topology_ids = 3;</code>
      */
     @java.lang.Override
     public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
       return topologyIds_;
     }
     /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     * <code>repeated .context.TopologyId topology_ids = 3;</code>
      */
     @java.lang.Override
     public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
@@ -4221,21 +4324,21 @@ public final class ContextOuterClass {
       return topologyIds_;
     }
     /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     * <code>repeated .context.TopologyId topology_ids = 3;</code>
      */
     @java.lang.Override
     public int getTopologyIdsCount() {
       return topologyIds_.size();
     }
     /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     * <code>repeated .context.TopologyId topology_ids = 3;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
       return topologyIds_.get(index);
     }
     /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     * <code>repeated .context.TopologyId topology_ids = 3;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
@@ -4243,17 +4346,17 @@ public final class ContextOuterClass {
       return topologyIds_.get(index);
     }
 
-    public static final int SERVICE_IDS_FIELD_NUMBER = 3;
+    public static final int SERVICE_IDS_FIELD_NUMBER = 4;
     private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_;
     /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     * <code>repeated .context.ServiceId service_ids = 4;</code>
      */
     @java.lang.Override
     public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
       return serviceIds_;
     }
     /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     * <code>repeated .context.ServiceId service_ids = 4;</code>
      */
     @java.lang.Override
     public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
@@ -4261,21 +4364,21 @@ public final class ContextOuterClass {
       return serviceIds_;
     }
     /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     * <code>repeated .context.ServiceId service_ids = 4;</code>
      */
     @java.lang.Override
     public int getServiceIdsCount() {
       return serviceIds_.size();
     }
     /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     * <code>repeated .context.ServiceId service_ids = 4;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.ServiceId getServiceIds(int index) {
       return serviceIds_.get(index);
     }
     /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     * <code>repeated .context.ServiceId service_ids = 4;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
@@ -4283,10 +4386,50 @@ public final class ContextOuterClass {
       return serviceIds_.get(index);
     }
 
-    public static final int CONTROLLER_FIELD_NUMBER = 4;
+    public static final int SLICE_IDS_FIELD_NUMBER = 5;
+    private java.util.List<context.ContextOuterClass.SliceId> sliceIds_;
+    /**
+     * <code>repeated .context.SliceId slice_ids = 5;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
+      return sliceIds_;
+    }
+    /**
+     * <code>repeated .context.SliceId slice_ids = 5;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+        getSliceIdsOrBuilderList() {
+      return sliceIds_;
+    }
+    /**
+     * <code>repeated .context.SliceId slice_ids = 5;</code>
+     */
+    @java.lang.Override
+    public int getSliceIdsCount() {
+      return sliceIds_.size();
+    }
+    /**
+     * <code>repeated .context.SliceId slice_ids = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceId getSliceIds(int index) {
+      return sliceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.SliceId slice_ids = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
+        int index) {
+      return sliceIds_.get(index);
+    }
+
+    public static final int CONTROLLER_FIELD_NUMBER = 6;
     private context.ContextOuterClass.TeraFlowController controller_;
     /**
-     * <code>.context.TeraFlowController controller = 4;</code>
+     * <code>.context.TeraFlowController controller = 6;</code>
      * @return Whether the controller field is set.
      */
     @java.lang.Override
@@ -4294,7 +4437,7 @@ public final class ContextOuterClass {
       return controller_ != null;
     }
     /**
-     * <code>.context.TeraFlowController controller = 4;</code>
+     * <code>.context.TeraFlowController controller = 6;</code>
      * @return The controller.
      */
     @java.lang.Override
@@ -4302,7 +4445,7 @@ public final class ContextOuterClass {
       return controller_ == null ? context.ContextOuterClass.TeraFlowController.getDefaultInstance() : controller_;
     }
     /**
-     * <code>.context.TeraFlowController controller = 4;</code>
+     * <code>.context.TeraFlowController controller = 6;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.TeraFlowControllerOrBuilder getControllerOrBuilder() {
@@ -4326,14 +4469,20 @@ public final class ContextOuterClass {
       if (contextId_ != null) {
         output.writeMessage(1, getContextId());
       }
+      if (!getNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
+      }
       for (int i = 0; i < topologyIds_.size(); i++) {
-        output.writeMessage(2, topologyIds_.get(i));
+        output.writeMessage(3, topologyIds_.get(i));
       }
       for (int i = 0; i < serviceIds_.size(); i++) {
-        output.writeMessage(3, serviceIds_.get(i));
+        output.writeMessage(4, serviceIds_.get(i));
+      }
+      for (int i = 0; i < sliceIds_.size(); i++) {
+        output.writeMessage(5, sliceIds_.get(i));
       }
       if (controller_ != null) {
-        output.writeMessage(4, getController());
+        output.writeMessage(6, getController());
       }
       unknownFields.writeTo(output);
     }
@@ -4348,17 +4497,24 @@ public final class ContextOuterClass {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(1, getContextId());
       }
+      if (!getNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
+      }
       for (int i = 0; i < topologyIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, topologyIds_.get(i));
+          .computeMessageSize(3, topologyIds_.get(i));
       }
       for (int i = 0; i < serviceIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, serviceIds_.get(i));
+          .computeMessageSize(4, serviceIds_.get(i));
+      }
+      for (int i = 0; i < sliceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, sliceIds_.get(i));
       }
       if (controller_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, getController());
+          .computeMessageSize(6, getController());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -4380,10 +4536,14 @@ public final class ContextOuterClass {
         if (!getContextId()
             .equals(other.getContextId())) return false;
       }
+      if (!getName()
+          .equals(other.getName())) return false;
       if (!getTopologyIdsList()
           .equals(other.getTopologyIdsList())) return false;
       if (!getServiceIdsList()
           .equals(other.getServiceIdsList())) return false;
+      if (!getSliceIdsList()
+          .equals(other.getSliceIdsList())) return false;
       if (hasController() != other.hasController()) return false;
       if (hasController()) {
         if (!getController()
@@ -4404,6 +4564,8 @@ public final class ContextOuterClass {
         hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
         hash = (53 * hash) + getContextId().hashCode();
       }
+      hash = (37 * hash) + NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getName().hashCode();
       if (getTopologyIdsCount() > 0) {
         hash = (37 * hash) + TOPOLOGY_IDS_FIELD_NUMBER;
         hash = (53 * hash) + getTopologyIdsList().hashCode();
@@ -4412,6 +4574,10 @@ public final class ContextOuterClass {
         hash = (37 * hash) + SERVICE_IDS_FIELD_NUMBER;
         hash = (53 * hash) + getServiceIdsList().hashCode();
       }
+      if (getSliceIdsCount() > 0) {
+        hash = (37 * hash) + SLICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceIdsList().hashCode();
+      }
       if (hasController()) {
         hash = (37 * hash) + CONTROLLER_FIELD_NUMBER;
         hash = (53 * hash) + getController().hashCode();
@@ -4546,6 +4712,7 @@ public final class ContextOuterClass {
                 .alwaysUseFieldBuilders) {
           getTopologyIdsFieldBuilder();
           getServiceIdsFieldBuilder();
+          getSliceIdsFieldBuilder();
         }
       }
       @java.lang.Override
@@ -4557,6 +4724,8 @@ public final class ContextOuterClass {
           contextId_ = null;
           contextIdBuilder_ = null;
         }
+        name_ = "";
+
         if (topologyIdsBuilder_ == null) {
           topologyIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
@@ -4569,6 +4738,12 @@ public final class ContextOuterClass {
         } else {
           serviceIdsBuilder_.clear();
         }
+        if (sliceIdsBuilder_ == null) {
+          sliceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
+        } else {
+          sliceIdsBuilder_.clear();
+        }
         if (controllerBuilder_ == null) {
           controller_ = null;
         } else {
@@ -4607,6 +4782,7 @@ public final class ContextOuterClass {
         } else {
           result.contextId_ = contextIdBuilder_.build();
         }
+        result.name_ = name_;
         if (topologyIdsBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
             topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
@@ -4625,6 +4801,15 @@ public final class ContextOuterClass {
         } else {
           result.serviceIds_ = serviceIdsBuilder_.build();
         }
+        if (sliceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000004) != 0)) {
+            sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
+            bitField0_ = (bitField0_ & ~0x00000004);
+          }
+          result.sliceIds_ = sliceIds_;
+        } else {
+          result.sliceIds_ = sliceIdsBuilder_.build();
+        }
         if (controllerBuilder_ == null) {
           result.controller_ = controller_;
         } else {
@@ -4681,6 +4866,10 @@ public final class ContextOuterClass {
         if (other.hasContextId()) {
           mergeContextId(other.getContextId());
         }
+        if (!other.getName().isEmpty()) {
+          name_ = other.name_;
+          onChanged();
+        }
         if (topologyIdsBuilder_ == null) {
           if (!other.topologyIds_.isEmpty()) {
             if (topologyIds_.isEmpty()) {
@@ -4733,6 +4922,32 @@ public final class ContextOuterClass {
             }
           }
         }
+        if (sliceIdsBuilder_ == null) {
+          if (!other.sliceIds_.isEmpty()) {
+            if (sliceIds_.isEmpty()) {
+              sliceIds_ = other.sliceIds_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+            } else {
+              ensureSliceIdsIsMutable();
+              sliceIds_.addAll(other.sliceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.sliceIds_.isEmpty()) {
+            if (sliceIdsBuilder_.isEmpty()) {
+              sliceIdsBuilder_.dispose();
+              sliceIdsBuilder_ = null;
+              sliceIds_ = other.sliceIds_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+              sliceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSliceIdsFieldBuilder() : null;
+            } else {
+              sliceIdsBuilder_.addAllMessages(other.sliceIds_);
+            }
+          }
+        }
         if (other.hasController()) {
           mergeController(other.getController());
         }
@@ -4885,6 +5100,82 @@ public final class ContextOuterClass {
         return contextIdBuilder_;
       }
 
+      private java.lang.Object name_ = "";
+      /**
+       * <code>string name = 2;</code>
+       * @return The name.
+       */
+      public java.lang.String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          name_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @return The bytes for name.
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @param value The name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @param value The bytes for name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        name_ = value;
+        onChanged();
+        return this;
+      }
+
       private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_ =
         java.util.Collections.emptyList();
       private void ensureTopologyIdsIsMutable() {
@@ -4898,7 +5189,7 @@ public final class ContextOuterClass {
           context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdsBuilder_;
 
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>repeated .context.TopologyId topology_ids = 3;</code>
        */
       public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
         if (topologyIdsBuilder_ == null) {
@@ -4908,7 +5199,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>repeated .context.TopologyId topology_ids = 3;</code>
        */
       public int getTopologyIdsCount() {
         if (topologyIdsBuilder_ == null) {
@@ -4918,7 +5209,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>repeated .context.TopologyId topology_ids = 3;</code>
        */
       public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
         if (topologyIdsBuilder_ == null) {
@@ -4928,7 +5219,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>repeated .context.TopologyId topology_ids = 3;</code>
        */
       public Builder setTopologyIds(
           int index, context.ContextOuterClass.TopologyId value) {
@@ -4945,7 +5236,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>repeated .context.TopologyId topology_ids = 3;</code>
        */
       public Builder setTopologyIds(
           int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
@@ -4959,7 +5250,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>repeated .context.TopologyId topology_ids = 3;</code>
        */
       public Builder addTopologyIds(context.ContextOuterClass.TopologyId value) {
         if (topologyIdsBuilder_ == null) {
@@ -4975,7 +5266,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>repeated .context.TopologyId topology_ids = 3;</code>
        */
       public Builder addTopologyIds(
           int index, context.ContextOuterClass.TopologyId value) {
@@ -4992,7 +5283,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>repeated .context.TopologyId topology_ids = 3;</code>
        */
       public Builder addTopologyIds(
           context.ContextOuterClass.TopologyId.Builder builderForValue) {
@@ -5006,7 +5297,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>repeated .context.TopologyId topology_ids = 3;</code>
        */
       public Builder addTopologyIds(
           int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
@@ -5020,7 +5311,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>repeated .context.TopologyId topology_ids = 3;</code>
        */
       public Builder addAllTopologyIds(
           java.lang.Iterable<? extends context.ContextOuterClass.TopologyId> values) {
@@ -5035,7 +5326,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>repeated .context.TopologyId topology_ids = 3;</code>
        */
       public Builder clearTopologyIds() {
         if (topologyIdsBuilder_ == null) {
@@ -5048,7 +5339,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>repeated .context.TopologyId topology_ids = 3;</code>
        */
       public Builder removeTopologyIds(int index) {
         if (topologyIdsBuilder_ == null) {
@@ -5061,14 +5352,14 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>repeated .context.TopologyId topology_ids = 3;</code>
        */
       public context.ContextOuterClass.TopologyId.Builder getTopologyIdsBuilder(
           int index) {
         return getTopologyIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>repeated .context.TopologyId topology_ids = 3;</code>
        */
       public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
           int index) {
@@ -5078,7 +5369,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>repeated .context.TopologyId topology_ids = 3;</code>
        */
       public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
            getTopologyIdsOrBuilderList() {
@@ -5089,14 +5380,14 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>repeated .context.TopologyId topology_ids = 3;</code>
        */
       public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder() {
         return getTopologyIdsFieldBuilder().addBuilder(
             context.ContextOuterClass.TopologyId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>repeated .context.TopologyId topology_ids = 3;</code>
        */
       public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder(
           int index) {
@@ -5104,7 +5395,7 @@ public final class ContextOuterClass {
             index, context.ContextOuterClass.TopologyId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>repeated .context.TopologyId topology_ids = 3;</code>
        */
       public java.util.List<context.ContextOuterClass.TopologyId.Builder> 
            getTopologyIdsBuilderList() {
@@ -5138,7 +5429,7 @@ public final class ContextOuterClass {
           context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdsBuilder_;
 
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.ServiceId service_ids = 4;</code>
        */
       public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
         if (serviceIdsBuilder_ == null) {
@@ -5148,7 +5439,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.ServiceId service_ids = 4;</code>
        */
       public int getServiceIdsCount() {
         if (serviceIdsBuilder_ == null) {
@@ -5158,7 +5449,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.ServiceId service_ids = 4;</code>
        */
       public context.ContextOuterClass.ServiceId getServiceIds(int index) {
         if (serviceIdsBuilder_ == null) {
@@ -5168,7 +5459,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.ServiceId service_ids = 4;</code>
        */
       public Builder setServiceIds(
           int index, context.ContextOuterClass.ServiceId value) {
@@ -5185,7 +5476,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.ServiceId service_ids = 4;</code>
        */
       public Builder setServiceIds(
           int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
@@ -5199,7 +5490,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.ServiceId service_ids = 4;</code>
        */
       public Builder addServiceIds(context.ContextOuterClass.ServiceId value) {
         if (serviceIdsBuilder_ == null) {
@@ -5215,7 +5506,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.ServiceId service_ids = 4;</code>
        */
       public Builder addServiceIds(
           int index, context.ContextOuterClass.ServiceId value) {
@@ -5232,7 +5523,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.ServiceId service_ids = 4;</code>
        */
       public Builder addServiceIds(
           context.ContextOuterClass.ServiceId.Builder builderForValue) {
@@ -5246,7 +5537,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.ServiceId service_ids = 4;</code>
        */
       public Builder addServiceIds(
           int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
@@ -5260,7 +5551,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.ServiceId service_ids = 4;</code>
        */
       public Builder addAllServiceIds(
           java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
@@ -5275,7 +5566,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.ServiceId service_ids = 4;</code>
        */
       public Builder clearServiceIds() {
         if (serviceIdsBuilder_ == null) {
@@ -5288,7 +5579,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.ServiceId service_ids = 4;</code>
        */
       public Builder removeServiceIds(int index) {
         if (serviceIdsBuilder_ == null) {
@@ -5301,14 +5592,14 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.ServiceId service_ids = 4;</code>
        */
       public context.ContextOuterClass.ServiceId.Builder getServiceIdsBuilder(
           int index) {
         return getServiceIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.ServiceId service_ids = 4;</code>
        */
       public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
           int index) {
@@ -5318,7 +5609,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.ServiceId service_ids = 4;</code>
        */
       public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
            getServiceIdsOrBuilderList() {
@@ -5329,14 +5620,14 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.ServiceId service_ids = 4;</code>
        */
       public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder() {
         return getServiceIdsFieldBuilder().addBuilder(
             context.ContextOuterClass.ServiceId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.ServiceId service_ids = 4;</code>
        */
       public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder(
           int index) {
@@ -5344,7 +5635,7 @@ public final class ContextOuterClass {
             index, context.ContextOuterClass.ServiceId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.ServiceId service_ids = 4;</code>
        */
       public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
            getServiceIdsBuilderList() {
@@ -5365,18 +5656,258 @@ public final class ContextOuterClass {
         return serviceIdsBuilder_;
       }
 
+      private java.util.List<context.ContextOuterClass.SliceId> sliceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureSliceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000004) != 0)) {
+          sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>(sliceIds_);
+          bitField0_ |= 0x00000004;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdsBuilder_;
+
+      /**
+       * <code>repeated .context.SliceId slice_ids = 5;</code>
+       */
+      public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
+        if (sliceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(sliceIds_);
+        } else {
+          return sliceIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.SliceId slice_ids = 5;</code>
+       */
+      public int getSliceIdsCount() {
+        if (sliceIdsBuilder_ == null) {
+          return sliceIds_.size();
+        } else {
+          return sliceIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.SliceId slice_ids = 5;</code>
+       */
+      public context.ContextOuterClass.SliceId getSliceIds(int index) {
+        if (sliceIdsBuilder_ == null) {
+          return sliceIds_.get(index);
+        } else {
+          return sliceIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.SliceId slice_ids = 5;</code>
+       */
+      public Builder setSliceIds(
+          int index, context.ContextOuterClass.SliceId value) {
+        if (sliceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceIdsIsMutable();
+          sliceIds_.set(index, value);
+          onChanged();
+        } else {
+          sliceIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.SliceId slice_ids = 5;</code>
+       */
+      public Builder setSliceIds(
+          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          sliceIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.SliceId slice_ids = 5;</code>
+       */
+      public Builder addSliceIds(context.ContextOuterClass.SliceId value) {
+        if (sliceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(value);
+          onChanged();
+        } else {
+          sliceIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.SliceId slice_ids = 5;</code>
+       */
+      public Builder addSliceIds(
+          int index, context.ContextOuterClass.SliceId value) {
+        if (sliceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(index, value);
+          onChanged();
+        } else {
+          sliceIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.SliceId slice_ids = 5;</code>
+       */
+      public Builder addSliceIds(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          sliceIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.SliceId slice_ids = 5;</code>
+       */
+      public Builder addSliceIds(
+          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          sliceIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.SliceId slice_ids = 5;</code>
+       */
+      public Builder addAllSliceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.SliceId> values) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, sliceIds_);
+          onChanged();
+        } else {
+          sliceIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.SliceId slice_ids = 5;</code>
+       */
+      public Builder clearSliceIds() {
+        if (sliceIdsBuilder_ == null) {
+          sliceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
+          onChanged();
+        } else {
+          sliceIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.SliceId slice_ids = 5;</code>
+       */
+      public Builder removeSliceIds(int index) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.remove(index);
+          onChanged();
+        } else {
+          sliceIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.SliceId slice_ids = 5;</code>
+       */
+      public context.ContextOuterClass.SliceId.Builder getSliceIdsBuilder(
+          int index) {
+        return getSliceIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.SliceId slice_ids = 5;</code>
+       */
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
+          int index) {
+        if (sliceIdsBuilder_ == null) {
+          return sliceIds_.get(index);  } else {
+          return sliceIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.SliceId slice_ids = 5;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+           getSliceIdsOrBuilderList() {
+        if (sliceIdsBuilder_ != null) {
+          return sliceIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(sliceIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.SliceId slice_ids = 5;</code>
+       */
+      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder() {
+        return getSliceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.SliceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.SliceId slice_ids = 5;</code>
+       */
+      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder(
+          int index) {
+        return getSliceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.SliceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.SliceId slice_ids = 5;</code>
+       */
+      public java.util.List<context.ContextOuterClass.SliceId.Builder> 
+           getSliceIdsBuilderList() {
+        return getSliceIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceIdsFieldBuilder() {
+        if (sliceIdsBuilder_ == null) {
+          sliceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  sliceIds_,
+                  ((bitField0_ & 0x00000004) != 0),
+                  getParentForChildren(),
+                  isClean());
+          sliceIds_ = null;
+        }
+        return sliceIdsBuilder_;
+      }
+
       private context.ContextOuterClass.TeraFlowController controller_;
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.TeraFlowController, context.ContextOuterClass.TeraFlowController.Builder, context.ContextOuterClass.TeraFlowControllerOrBuilder> controllerBuilder_;
       /**
-       * <code>.context.TeraFlowController controller = 4;</code>
+       * <code>.context.TeraFlowController controller = 6;</code>
        * @return Whether the controller field is set.
        */
       public boolean hasController() {
         return controllerBuilder_ != null || controller_ != null;
       }
       /**
-       * <code>.context.TeraFlowController controller = 4;</code>
+       * <code>.context.TeraFlowController controller = 6;</code>
        * @return The controller.
        */
       public context.ContextOuterClass.TeraFlowController getController() {
@@ -5387,7 +5918,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>.context.TeraFlowController controller = 4;</code>
+       * <code>.context.TeraFlowController controller = 6;</code>
        */
       public Builder setController(context.ContextOuterClass.TeraFlowController value) {
         if (controllerBuilder_ == null) {
@@ -5403,7 +5934,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.TeraFlowController controller = 4;</code>
+       * <code>.context.TeraFlowController controller = 6;</code>
        */
       public Builder setController(
           context.ContextOuterClass.TeraFlowController.Builder builderForValue) {
@@ -5417,7 +5948,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.TeraFlowController controller = 4;</code>
+       * <code>.context.TeraFlowController controller = 6;</code>
        */
       public Builder mergeController(context.ContextOuterClass.TeraFlowController value) {
         if (controllerBuilder_ == null) {
@@ -5435,7 +5966,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.TeraFlowController controller = 4;</code>
+       * <code>.context.TeraFlowController controller = 6;</code>
        */
       public Builder clearController() {
         if (controllerBuilder_ == null) {
@@ -5449,7 +5980,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.TeraFlowController controller = 4;</code>
+       * <code>.context.TeraFlowController controller = 6;</code>
        */
       public context.ContextOuterClass.TeraFlowController.Builder getControllerBuilder() {
         
@@ -5457,7 +5988,7 @@ public final class ContextOuterClass {
         return getControllerFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.TeraFlowController controller = 4;</code>
+       * <code>.context.TeraFlowController controller = 6;</code>
        */
       public context.ContextOuterClass.TeraFlowControllerOrBuilder getControllerOrBuilder() {
         if (controllerBuilder_ != null) {
@@ -5468,7 +5999,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>.context.TeraFlowController controller = 4;</code>
+       * <code>.context.TeraFlowController controller = 6;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.TeraFlowController, context.ContextOuterClass.TeraFlowController.Builder, context.ContextOuterClass.TeraFlowControllerOrBuilder> 
@@ -8798,49 +9329,61 @@ public final class ContextOuterClass {
     context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
 
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>string name = 2;</code>
+     * @return The name.
+     */
+    java.lang.String getName();
+    /**
+     * <code>string name = 2;</code>
+     * @return The bytes for name.
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+
+    /**
+     * <code>repeated .context.DeviceId device_ids = 3;</code>
      */
     java.util.List<context.ContextOuterClass.DeviceId> 
         getDeviceIdsList();
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>repeated .context.DeviceId device_ids = 3;</code>
      */
     context.ContextOuterClass.DeviceId getDeviceIds(int index);
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>repeated .context.DeviceId device_ids = 3;</code>
      */
     int getDeviceIdsCount();
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>repeated .context.DeviceId device_ids = 3;</code>
      */
     java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
         getDeviceIdsOrBuilderList();
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>repeated .context.DeviceId device_ids = 3;</code>
      */
     context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
         int index);
 
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>repeated .context.LinkId link_ids = 4;</code>
      */
     java.util.List<context.ContextOuterClass.LinkId> 
         getLinkIdsList();
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>repeated .context.LinkId link_ids = 4;</code>
      */
     context.ContextOuterClass.LinkId getLinkIds(int index);
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>repeated .context.LinkId link_ids = 4;</code>
      */
     int getLinkIdsCount();
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>repeated .context.LinkId link_ids = 4;</code>
      */
     java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
         getLinkIdsOrBuilderList();
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>repeated .context.LinkId link_ids = 4;</code>
      */
     context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
         int index);
@@ -8858,6 +9401,7 @@ public final class ContextOuterClass {
       super(builder);
     }
     private Topology() {
+      name_ = "";
       deviceIds_ = java.util.Collections.emptyList();
       linkIds_ = java.util.Collections.emptyList();
     }
@@ -8907,6 +9451,12 @@ public final class ContextOuterClass {
               break;
             }
             case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              name_ = s;
+              break;
+            }
+            case 26: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                 deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>();
                 mutable_bitField0_ |= 0x00000001;
@@ -8915,7 +9465,7 @@ public final class ContextOuterClass {
                   input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry));
               break;
             }
-            case 26: {
+            case 34: {
               if (!((mutable_bitField0_ & 0x00000002) != 0)) {
                 linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>();
                 mutable_bitField0_ |= 0x00000002;
@@ -8988,17 +9538,55 @@ public final class ContextOuterClass {
       return getTopologyId();
     }
 
-    public static final int DEVICE_IDS_FIELD_NUMBER = 2;
+    public static final int NAME_FIELD_NUMBER = 2;
+    private volatile java.lang.Object name_;
+    /**
+     * <code>string name = 2;</code>
+     * @return The name.
+     */
+    @java.lang.Override
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        name_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string name = 2;</code>
+     * @return The bytes for name.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int DEVICE_IDS_FIELD_NUMBER = 3;
     private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_;
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>repeated .context.DeviceId device_ids = 3;</code>
      */
     @java.lang.Override
     public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
       return deviceIds_;
     }
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>repeated .context.DeviceId device_ids = 3;</code>
      */
     @java.lang.Override
     public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
@@ -9006,21 +9594,21 @@ public final class ContextOuterClass {
       return deviceIds_;
     }
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>repeated .context.DeviceId device_ids = 3;</code>
      */
     @java.lang.Override
     public int getDeviceIdsCount() {
       return deviceIds_.size();
     }
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>repeated .context.DeviceId device_ids = 3;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
       return deviceIds_.get(index);
     }
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>repeated .context.DeviceId device_ids = 3;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
@@ -9028,17 +9616,17 @@ public final class ContextOuterClass {
       return deviceIds_.get(index);
     }
 
-    public static final int LINK_IDS_FIELD_NUMBER = 3;
+    public static final int LINK_IDS_FIELD_NUMBER = 4;
     private java.util.List<context.ContextOuterClass.LinkId> linkIds_;
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>repeated .context.LinkId link_ids = 4;</code>
      */
     @java.lang.Override
     public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
       return linkIds_;
     }
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>repeated .context.LinkId link_ids = 4;</code>
      */
     @java.lang.Override
     public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
@@ -9046,21 +9634,21 @@ public final class ContextOuterClass {
       return linkIds_;
     }
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>repeated .context.LinkId link_ids = 4;</code>
      */
     @java.lang.Override
     public int getLinkIdsCount() {
       return linkIds_.size();
     }
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>repeated .context.LinkId link_ids = 4;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.LinkId getLinkIds(int index) {
       return linkIds_.get(index);
     }
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>repeated .context.LinkId link_ids = 4;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
@@ -9085,11 +9673,14 @@ public final class ContextOuterClass {
       if (topologyId_ != null) {
         output.writeMessage(1, getTopologyId());
       }
+      if (!getNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
+      }
       for (int i = 0; i < deviceIds_.size(); i++) {
-        output.writeMessage(2, deviceIds_.get(i));
+        output.writeMessage(3, deviceIds_.get(i));
       }
       for (int i = 0; i < linkIds_.size(); i++) {
-        output.writeMessage(3, linkIds_.get(i));
+        output.writeMessage(4, linkIds_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -9104,13 +9695,16 @@ public final class ContextOuterClass {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(1, getTopologyId());
       }
+      if (!getNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
+      }
       for (int i = 0; i < deviceIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, deviceIds_.get(i));
+          .computeMessageSize(3, deviceIds_.get(i));
       }
       for (int i = 0; i < linkIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, linkIds_.get(i));
+          .computeMessageSize(4, linkIds_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -9132,6 +9726,8 @@ public final class ContextOuterClass {
         if (!getTopologyId()
             .equals(other.getTopologyId())) return false;
       }
+      if (!getName()
+          .equals(other.getName())) return false;
       if (!getDeviceIdsList()
           .equals(other.getDeviceIdsList())) return false;
       if (!getLinkIdsList()
@@ -9151,6 +9747,8 @@ public final class ContextOuterClass {
         hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
         hash = (53 * hash) + getTopologyId().hashCode();
       }
+      hash = (37 * hash) + NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getName().hashCode();
       if (getDeviceIdsCount() > 0) {
         hash = (37 * hash) + DEVICE_IDS_FIELD_NUMBER;
         hash = (53 * hash) + getDeviceIdsList().hashCode();
@@ -9300,6 +9898,8 @@ public final class ContextOuterClass {
           topologyId_ = null;
           topologyIdBuilder_ = null;
         }
+        name_ = "";
+
         if (deviceIdsBuilder_ == null) {
           deviceIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
@@ -9344,6 +9944,7 @@ public final class ContextOuterClass {
         } else {
           result.topologyId_ = topologyIdBuilder_.build();
         }
+        result.name_ = name_;
         if (deviceIdsBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
             deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
@@ -9413,6 +10014,10 @@ public final class ContextOuterClass {
         if (other.hasTopologyId()) {
           mergeTopologyId(other.getTopologyId());
         }
+        if (!other.getName().isEmpty()) {
+          name_ = other.name_;
+          onChanged();
+        }
         if (deviceIdsBuilder_ == null) {
           if (!other.deviceIds_.isEmpty()) {
             if (deviceIds_.isEmpty()) {
@@ -9614,6 +10219,82 @@ public final class ContextOuterClass {
         return topologyIdBuilder_;
       }
 
+      private java.lang.Object name_ = "";
+      /**
+       * <code>string name = 2;</code>
+       * @return The name.
+       */
+      public java.lang.String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          name_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @return The bytes for name.
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @param value The name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @param value The bytes for name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        name_ = value;
+        onChanged();
+        return this;
+      }
+
       private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_ =
         java.util.Collections.emptyList();
       private void ensureDeviceIdsIsMutable() {
@@ -9627,7 +10308,7 @@ public final class ContextOuterClass {
           context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdsBuilder_;
 
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.DeviceId device_ids = 3;</code>
        */
       public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
         if (deviceIdsBuilder_ == null) {
@@ -9637,7 +10318,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.DeviceId device_ids = 3;</code>
        */
       public int getDeviceIdsCount() {
         if (deviceIdsBuilder_ == null) {
@@ -9647,7 +10328,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.DeviceId device_ids = 3;</code>
        */
       public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
         if (deviceIdsBuilder_ == null) {
@@ -9657,7 +10338,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.DeviceId device_ids = 3;</code>
        */
       public Builder setDeviceIds(
           int index, context.ContextOuterClass.DeviceId value) {
@@ -9674,7 +10355,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.DeviceId device_ids = 3;</code>
        */
       public Builder setDeviceIds(
           int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
@@ -9688,7 +10369,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.DeviceId device_ids = 3;</code>
        */
       public Builder addDeviceIds(context.ContextOuterClass.DeviceId value) {
         if (deviceIdsBuilder_ == null) {
@@ -9704,7 +10385,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.DeviceId device_ids = 3;</code>
        */
       public Builder addDeviceIds(
           int index, context.ContextOuterClass.DeviceId value) {
@@ -9721,7 +10402,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.DeviceId device_ids = 3;</code>
        */
       public Builder addDeviceIds(
           context.ContextOuterClass.DeviceId.Builder builderForValue) {
@@ -9735,7 +10416,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.DeviceId device_ids = 3;</code>
        */
       public Builder addDeviceIds(
           int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
@@ -9749,7 +10430,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.DeviceId device_ids = 3;</code>
        */
       public Builder addAllDeviceIds(
           java.lang.Iterable<? extends context.ContextOuterClass.DeviceId> values) {
@@ -9764,7 +10445,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.DeviceId device_ids = 3;</code>
        */
       public Builder clearDeviceIds() {
         if (deviceIdsBuilder_ == null) {
@@ -9777,7 +10458,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.DeviceId device_ids = 3;</code>
        */
       public Builder removeDeviceIds(int index) {
         if (deviceIdsBuilder_ == null) {
@@ -9790,14 +10471,14 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.DeviceId device_ids = 3;</code>
        */
       public context.ContextOuterClass.DeviceId.Builder getDeviceIdsBuilder(
           int index) {
         return getDeviceIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.DeviceId device_ids = 3;</code>
        */
       public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
           int index) {
@@ -9807,7 +10488,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.DeviceId device_ids = 3;</code>
        */
       public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
            getDeviceIdsOrBuilderList() {
@@ -9818,14 +10499,14 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.DeviceId device_ids = 3;</code>
        */
       public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder() {
         return getDeviceIdsFieldBuilder().addBuilder(
             context.ContextOuterClass.DeviceId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.DeviceId device_ids = 3;</code>
        */
       public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder(
           int index) {
@@ -9833,7 +10514,7 @@ public final class ContextOuterClass {
             index, context.ContextOuterClass.DeviceId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.DeviceId device_ids = 3;</code>
        */
       public java.util.List<context.ContextOuterClass.DeviceId.Builder> 
            getDeviceIdsBuilderList() {
@@ -9867,7 +10548,7 @@ public final class ContextOuterClass {
           context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdsBuilder_;
 
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
       public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
         if (linkIdsBuilder_ == null) {
@@ -9877,7 +10558,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
       public int getLinkIdsCount() {
         if (linkIdsBuilder_ == null) {
@@ -9887,7 +10568,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
       public context.ContextOuterClass.LinkId getLinkIds(int index) {
         if (linkIdsBuilder_ == null) {
@@ -9897,7 +10578,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
       public Builder setLinkIds(
           int index, context.ContextOuterClass.LinkId value) {
@@ -9914,7 +10595,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
       public Builder setLinkIds(
           int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
@@ -9928,7 +10609,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
       public Builder addLinkIds(context.ContextOuterClass.LinkId value) {
         if (linkIdsBuilder_ == null) {
@@ -9944,7 +10625,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
       public Builder addLinkIds(
           int index, context.ContextOuterClass.LinkId value) {
@@ -9961,7 +10642,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
       public Builder addLinkIds(
           context.ContextOuterClass.LinkId.Builder builderForValue) {
@@ -9975,7 +10656,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
       public Builder addLinkIds(
           int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
@@ -9989,7 +10670,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
       public Builder addAllLinkIds(
           java.lang.Iterable<? extends context.ContextOuterClass.LinkId> values) {
@@ -10004,7 +10685,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
       public Builder clearLinkIds() {
         if (linkIdsBuilder_ == null) {
@@ -10017,7 +10698,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
       public Builder removeLinkIds(int index) {
         if (linkIdsBuilder_ == null) {
@@ -10030,14 +10711,14 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
       public context.ContextOuterClass.LinkId.Builder getLinkIdsBuilder(
           int index) {
         return getLinkIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
       public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
           int index) {
@@ -10047,7 +10728,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
       public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
            getLinkIdsOrBuilderList() {
@@ -10058,14 +10739,14 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
       public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder() {
         return getLinkIdsFieldBuilder().addBuilder(
             context.ContextOuterClass.LinkId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
       public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder(
           int index) {
@@ -10073,7 +10754,7 @@ public final class ContextOuterClass {
             index, context.ContextOuterClass.LinkId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
       public java.util.List<context.ContextOuterClass.LinkId.Builder> 
            getLinkIdsBuilderList() {
@@ -10146,55 +10827,108 @@ public final class ContextOuterClass {
 
   }
 
-  public interface TopologyIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.TopologyIdList)
+  public interface TopologyDetailsOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.TopologyDetails)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return Whether the topologyId field is set.
      */
-    java.util.List<context.ContextOuterClass.TopologyId> 
-        getTopologyIdsList();
+    boolean hasTopologyId();
     /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return The topologyId.
      */
-    context.ContextOuterClass.TopologyId getTopologyIds(int index);
+    context.ContextOuterClass.TopologyId getTopologyId();
     /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     * <code>.context.TopologyId topology_id = 1;</code>
      */
-    int getTopologyIdsCount();
+    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
+
     /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     * <code>string name = 2;</code>
+     * @return The name.
      */
-    java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
-        getTopologyIdsOrBuilderList();
+    java.lang.String getName();
     /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     * <code>string name = 2;</code>
+     * @return The bytes for name.
      */
-    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
+    com.google.protobuf.ByteString
+        getNameBytes();
+
+    /**
+     * <code>repeated .context.Device devices = 3;</code>
+     */
+    java.util.List<context.ContextOuterClass.Device> 
+        getDevicesList();
+    /**
+     * <code>repeated .context.Device devices = 3;</code>
+     */
+    context.ContextOuterClass.Device getDevices(int index);
+    /**
+     * <code>repeated .context.Device devices = 3;</code>
+     */
+    int getDevicesCount();
+    /**
+     * <code>repeated .context.Device devices = 3;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.DeviceOrBuilder> 
+        getDevicesOrBuilderList();
+    /**
+     * <code>repeated .context.Device devices = 3;</code>
+     */
+    context.ContextOuterClass.DeviceOrBuilder getDevicesOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.Link links = 4;</code>
+     */
+    java.util.List<context.ContextOuterClass.Link> 
+        getLinksList();
+    /**
+     * <code>repeated .context.Link links = 4;</code>
+     */
+    context.ContextOuterClass.Link getLinks(int index);
+    /**
+     * <code>repeated .context.Link links = 4;</code>
+     */
+    int getLinksCount();
+    /**
+     * <code>repeated .context.Link links = 4;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
+        getLinksOrBuilderList();
+    /**
+     * <code>repeated .context.Link links = 4;</code>
+     */
+    context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code context.TopologyIdList}
+   * Protobuf type {@code context.TopologyDetails}
    */
-  public static final class TopologyIdList extends
+  public static final class TopologyDetails extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.TopologyIdList)
-      TopologyIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.TopologyDetails)
+      TopologyDetailsOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use TopologyIdList.newBuilder() to construct.
-    private TopologyIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use TopologyDetails.newBuilder() to construct.
+    private TopologyDetails(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private TopologyIdList() {
-      topologyIds_ = java.util.Collections.emptyList();
+    private TopologyDetails() {
+      name_ = "";
+      devices_ = java.util.Collections.emptyList();
+      links_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new TopologyIdList();
+      return new TopologyDetails();
     }
 
     @java.lang.Override
@@ -10202,7 +10936,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private TopologyIdList(
+    private TopologyDetails(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -10222,12 +10956,40 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
+              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
+              if (topologyId_ != null) {
+                subBuilder = topologyId_.toBuilder();
+              }
+              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(topologyId_);
+                topologyId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              name_ = s;
+              break;
+            }
+            case 26: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>();
+                devices_ = new java.util.ArrayList<context.ContextOuterClass.Device>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              topologyIds_.add(
-                  input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry));
+              devices_.add(
+                  input.readMessage(context.ContextOuterClass.Device.parser(), extensionRegistry));
+              break;
+            }
+            case 34: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                links_ = new java.util.ArrayList<context.ContextOuterClass.Link>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              links_.add(
+                  input.readMessage(context.ContextOuterClass.Link.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -10246,7 +11008,10 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
+          devices_ = java.util.Collections.unmodifiableList(devices_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          links_ = java.util.Collections.unmodifiableList(links_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -10254,55 +11019,162 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_TopologyIdList_descriptor;
+      return context.ContextOuterClass.internal_static_context_TopologyDetails_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_TopologyIdList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_TopologyDetails_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.TopologyIdList.class, context.ContextOuterClass.TopologyIdList.Builder.class);
+              context.ContextOuterClass.TopologyDetails.class, context.ContextOuterClass.TopologyDetails.Builder.class);
     }
 
-    public static final int TOPOLOGY_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_;
+    public static final int TOPOLOGY_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.TopologyId topologyId_;
     /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return Whether the topologyId field is set.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
-      return topologyIds_;
+    public boolean hasTopologyId() {
+      return topologyId_ != null;
     }
     /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return The topologyId.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
-        getTopologyIdsOrBuilderList() {
-      return topologyIds_;
+    public context.ContextOuterClass.TopologyId getTopologyId() {
+      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
     }
     /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     * <code>.context.TopologyId topology_id = 1;</code>
      */
     @java.lang.Override
-    public int getTopologyIdsCount() {
-      return topologyIds_.size();
+    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+      return getTopologyId();
+    }
+
+    public static final int NAME_FIELD_NUMBER = 2;
+    private volatile java.lang.Object name_;
+    /**
+     * <code>string name = 2;</code>
+     * @return The name.
+     */
+    @java.lang.Override
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        name_ = s;
+        return s;
+      }
     }
+
+    public static final int NAME_FIELD_NUMBER = 2;
+    private volatile java.lang.Object name_;
     /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     * <code>string name = 2;</code>
+     * @return The bytes for name.
      */
     @java.lang.Override
-    public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
-      return topologyIds_.get(index);
+    public com.google.protobuf.ByteString
+        getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
+
+    public static final int DEVICES_FIELD_NUMBER = 3;
+    private java.util.List<context.ContextOuterClass.Device> devices_;
     /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     * <code>repeated .context.Device devices = 3;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
+    public java.util.List<context.ContextOuterClass.Device> getDevicesList() {
+      return devices_;
+    }
+    /**
+     * <code>repeated .context.Device devices = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.DeviceOrBuilder> 
+        getDevicesOrBuilderList() {
+      return devices_;
+    }
+    /**
+     * <code>repeated .context.Device devices = 3;</code>
+     */
+    @java.lang.Override
+    public int getDevicesCount() {
+      return devices_.size();
+    }
+    /**
+     * <code>repeated .context.Device devices = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Device getDevices(int index) {
+      return devices_.get(index);
+    }
+    /**
+     * <code>repeated .context.Device devices = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceOrBuilder getDevicesOrBuilder(
         int index) {
-      return topologyIds_.get(index);
+      return devices_.get(index);
+    }
+
+    public static final int LINKS_FIELD_NUMBER = 4;
+    private java.util.List<context.ContextOuterClass.Link> links_;
+    /**
+     * <code>repeated .context.Link links = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.Link> getLinksList() {
+      return links_;
+    }
+    /**
+     * <code>repeated .context.Link links = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
+        getLinksOrBuilderList() {
+      return links_;
+    }
+    /**
+     * <code>repeated .context.Link links = 4;</code>
+     */
+    @java.lang.Override
+    public int getLinksCount() {
+      return links_.size();
+    }
+    /**
+     * <code>repeated .context.Link links = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Link getLinks(int index) {
+      return links_.get(index);
+    }
+    /**
+     * <code>repeated .context.Link links = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
+        int index) {
+      return links_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -10319,8 +11191,17 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < topologyIds_.size(); i++) {
-        output.writeMessage(1, topologyIds_.get(i));
+      if (topologyId_ != null) {
+        output.writeMessage(1, getTopologyId());
+      }
+      if (!getNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
+      }
+      for (int i = 0; i < devices_.size(); i++) {
+        output.writeMessage(3, devices_.get(i));
+      }
+      for (int i = 0; i < links_.size(); i++) {
+        output.writeMessage(4, links_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -10331,9 +11212,20 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < topologyIds_.size(); i++) {
+      if (topologyId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, topologyIds_.get(i));
+          .computeMessageSize(1, getTopologyId());
+      }
+      if (!getNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
+      }
+      for (int i = 0; i < devices_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, devices_.get(i));
+      }
+      for (int i = 0; i < links_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, links_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -10345,13 +11237,22 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.TopologyIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.TopologyDetails)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.TopologyIdList other = (context.ContextOuterClass.TopologyIdList) obj;
+      context.ContextOuterClass.TopologyDetails other = (context.ContextOuterClass.TopologyDetails) obj;
 
-      if (!getTopologyIdsList()
-          .equals(other.getTopologyIdsList())) return false;
+      if (hasTopologyId() != other.hasTopologyId()) return false;
+      if (hasTopologyId()) {
+        if (!getTopologyId()
+            .equals(other.getTopologyId())) return false;
+      }
+      if (!getName()
+          .equals(other.getName())) return false;
+      if (!getDevicesList()
+          .equals(other.getDevicesList())) return false;
+      if (!getLinksList()
+          .equals(other.getLinksList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -10363,78 +11264,88 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getTopologyIdsCount() > 0) {
-        hash = (37 * hash) + TOPOLOGY_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getTopologyIdsList().hashCode();
+      if (hasTopologyId()) {
+        hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyId().hashCode();
+      }
+      hash = (37 * hash) + NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getName().hashCode();
+      if (getDevicesCount() > 0) {
+        hash = (37 * hash) + DEVICES_FIELD_NUMBER;
+        hash = (53 * hash) + getDevicesList().hashCode();
+      }
+      if (getLinksCount() > 0) {
+        hash = (37 * hash) + LINKS_FIELD_NUMBER;
+        hash = (53 * hash) + getLinksList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.TopologyIdList parseFrom(
+    public static context.ContextOuterClass.TopologyDetails parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(
+    public static context.ContextOuterClass.TopologyDetails parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(
+    public static context.ContextOuterClass.TopologyDetails parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(
+    public static context.ContextOuterClass.TopologyDetails parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(byte[] data)
+    public static context.ContextOuterClass.TopologyDetails parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(
+    public static context.ContextOuterClass.TopologyDetails parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.TopologyDetails parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(
+    public static context.ContextOuterClass.TopologyDetails parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyIdList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.TopologyDetails parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyIdList parseDelimitedFrom(
+    public static context.ContextOuterClass.TopologyDetails parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(
+    public static context.ContextOuterClass.TopologyDetails parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(
+    public static context.ContextOuterClass.TopologyDetails parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -10447,7 +11358,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.TopologyIdList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.TopologyDetails prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -10463,26 +11374,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.TopologyIdList}
+     * Protobuf type {@code context.TopologyDetails}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.TopologyIdList)
-        context.ContextOuterClass.TopologyIdListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.TopologyDetails)
+        context.ContextOuterClass.TopologyDetailsOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_TopologyIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_TopologyDetails_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_TopologyIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_TopologyDetails_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.TopologyIdList.class, context.ContextOuterClass.TopologyIdList.Builder.class);
+                context.ContextOuterClass.TopologyDetails.class, context.ContextOuterClass.TopologyDetails.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.TopologyIdList.newBuilder()
+      // Construct using context.ContextOuterClass.TopologyDetails.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -10495,17 +11406,32 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getTopologyIdsFieldBuilder();
+          getDevicesFieldBuilder();
+          getLinksFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (topologyIdsBuilder_ == null) {
-          topologyIds_ = java.util.Collections.emptyList();
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
+        } else {
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
+        }
+        name_ = "";
+
+        if (devicesBuilder_ == null) {
+          devices_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          topologyIdsBuilder_.clear();
+          devicesBuilder_.clear();
+        }
+        if (linksBuilder_ == null) {
+          links_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          linksBuilder_.clear();
         }
         return this;
       }
@@ -10513,17 +11439,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_TopologyIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_TopologyDetails_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.TopologyIdList.getDefaultInstance();
+      public context.ContextOuterClass.TopologyDetails getDefaultInstanceForType() {
+        return context.ContextOuterClass.TopologyDetails.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyIdList build() {
-        context.ContextOuterClass.TopologyIdList result = buildPartial();
+      public context.ContextOuterClass.TopologyDetails build() {
+        context.ContextOuterClass.TopologyDetails result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -10531,17 +11457,32 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyIdList buildPartial() {
-        context.ContextOuterClass.TopologyIdList result = new context.ContextOuterClass.TopologyIdList(this);
+      public context.ContextOuterClass.TopologyDetails buildPartial() {
+        context.ContextOuterClass.TopologyDetails result = new context.ContextOuterClass.TopologyDetails(this);
         int from_bitField0_ = bitField0_;
-        if (topologyIdsBuilder_ == null) {
+        if (topologyIdBuilder_ == null) {
+          result.topologyId_ = topologyId_;
+        } else {
+          result.topologyId_ = topologyIdBuilder_.build();
+        }
+        result.name_ = name_;
+        if (devicesBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
+            devices_ = java.util.Collections.unmodifiableList(devices_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.topologyIds_ = topologyIds_;
+          result.devices_ = devices_;
         } else {
-          result.topologyIds_ = topologyIdsBuilder_.build();
+          result.devices_ = devicesBuilder_.build();
+        }
+        if (linksBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            links_ = java.util.Collections.unmodifiableList(links_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.links_ = links_;
+        } else {
+          result.links_ = linksBuilder_.build();
         }
         onBuilt();
         return result;
@@ -10581,39 +11522,72 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.TopologyIdList) {
-          return mergeFrom((context.ContextOuterClass.TopologyIdList)other);
+        if (other instanceof context.ContextOuterClass.TopologyDetails) {
+          return mergeFrom((context.ContextOuterClass.TopologyDetails)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.TopologyIdList other) {
-        if (other == context.ContextOuterClass.TopologyIdList.getDefaultInstance()) return this;
-        if (topologyIdsBuilder_ == null) {
-          if (!other.topologyIds_.isEmpty()) {
-            if (topologyIds_.isEmpty()) {
-              topologyIds_ = other.topologyIds_;
+      public Builder mergeFrom(context.ContextOuterClass.TopologyDetails other) {
+        if (other == context.ContextOuterClass.TopologyDetails.getDefaultInstance()) return this;
+        if (other.hasTopologyId()) {
+          mergeTopologyId(other.getTopologyId());
+        }
+        if (!other.getName().isEmpty()) {
+          name_ = other.name_;
+          onChanged();
+        }
+        if (devicesBuilder_ == null) {
+          if (!other.devices_.isEmpty()) {
+            if (devices_.isEmpty()) {
+              devices_ = other.devices_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureTopologyIdsIsMutable();
-              topologyIds_.addAll(other.topologyIds_);
+              ensureDevicesIsMutable();
+              devices_.addAll(other.devices_);
             }
             onChanged();
           }
         } else {
-          if (!other.topologyIds_.isEmpty()) {
-            if (topologyIdsBuilder_.isEmpty()) {
-              topologyIdsBuilder_.dispose();
-              topologyIdsBuilder_ = null;
-              topologyIds_ = other.topologyIds_;
+          if (!other.devices_.isEmpty()) {
+            if (devicesBuilder_.isEmpty()) {
+              devicesBuilder_.dispose();
+              devicesBuilder_ = null;
+              devices_ = other.devices_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              topologyIdsBuilder_ = 
+              devicesBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getTopologyIdsFieldBuilder() : null;
+                   getDevicesFieldBuilder() : null;
             } else {
-              topologyIdsBuilder_.addAllMessages(other.topologyIds_);
+              devicesBuilder_.addAllMessages(other.devices_);
+            }
+          }
+        }
+        if (linksBuilder_ == null) {
+          if (!other.links_.isEmpty()) {
+            if (links_.isEmpty()) {
+              links_ = other.links_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureLinksIsMutable();
+              links_.addAll(other.links_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.links_.isEmpty()) {
+            if (linksBuilder_.isEmpty()) {
+              linksBuilder_.dispose();
+              linksBuilder_ = null;
+              links_ = other.links_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              linksBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getLinksFieldBuilder() : null;
+            } else {
+              linksBuilder_.addAllMessages(other.links_);
             }
           }
         }
@@ -10632,11 +11606,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.TopologyIdList parsedMessage = null;
+        context.ContextOuterClass.TopologyDetails parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.TopologyIdList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.TopologyDetails) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -10647,347 +11621,782 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_ =
+      private context.ContextOuterClass.TopologyId topologyId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdBuilder_;
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       * @return Whether the topologyId field is set.
+       */
+      public boolean hasTopologyId() {
+        return topologyIdBuilder_ != null || topologyId_ != null;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       * @return The topologyId.
+       */
+      public context.ContextOuterClass.TopologyId getTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+        } else {
+          return topologyIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder setTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          topologyId_ = value;
+          onChanged();
+        } else {
+          topologyIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder setTopologyId(
+          context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = builderForValue.build();
+          onChanged();
+        } else {
+          topologyIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (topologyId_ != null) {
+            topologyId_ =
+              context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
+          } else {
+            topologyId_ = value;
+          }
+          onChanged();
+        } else {
+          topologyIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder clearTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
+          onChanged();
+        } else {
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+        
+        onChanged();
+        return getTopologyIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+        if (topologyIdBuilder_ != null) {
+          return topologyIdBuilder_.getMessageOrBuilder();
+        } else {
+          return topologyId_ == null ?
+              context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+        }
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
+          getTopologyIdFieldBuilder() {
+        if (topologyIdBuilder_ == null) {
+          topologyIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
+                  getTopologyId(),
+                  getParentForChildren(),
+                  isClean());
+          topologyId_ = null;
+        }
+        return topologyIdBuilder_;
+      }
+
+      private java.lang.Object name_ = "";
+      /**
+       * <code>string name = 2;</code>
+       * @return The name.
+       */
+      public java.lang.String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          name_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @return The bytes for name.
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @param value The name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @param value The bytes for name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        name_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<context.ContextOuterClass.Device> devices_ =
         java.util.Collections.emptyList();
-      private void ensureTopologyIdsIsMutable() {
+      private void ensureDevicesIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>(topologyIds_);
+          devices_ = new java.util.ArrayList<context.ContextOuterClass.Device>(devices_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdsBuilder_;
+          context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder> devicesBuilder_;
 
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.Device devices = 3;</code>
        */
-      public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
-        if (topologyIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(topologyIds_);
+      public java.util.List<context.ContextOuterClass.Device> getDevicesList() {
+        if (devicesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(devices_);
         } else {
-          return topologyIdsBuilder_.getMessageList();
+          return devicesBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.Device devices = 3;</code>
        */
-      public int getTopologyIdsCount() {
-        if (topologyIdsBuilder_ == null) {
-          return topologyIds_.size();
+      public int getDevicesCount() {
+        if (devicesBuilder_ == null) {
+          return devices_.size();
         } else {
-          return topologyIdsBuilder_.getCount();
+          return devicesBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.Device devices = 3;</code>
        */
-      public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
-        if (topologyIdsBuilder_ == null) {
-          return topologyIds_.get(index);
+      public context.ContextOuterClass.Device getDevices(int index) {
+        if (devicesBuilder_ == null) {
+          return devices_.get(index);
         } else {
-          return topologyIdsBuilder_.getMessage(index);
+          return devicesBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.Device devices = 3;</code>
        */
-      public Builder setTopologyIds(
-          int index, context.ContextOuterClass.TopologyId value) {
-        if (topologyIdsBuilder_ == null) {
+      public Builder setDevices(
+          int index, context.ContextOuterClass.Device value) {
+        if (devicesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureTopologyIdsIsMutable();
-          topologyIds_.set(index, value);
+          ensureDevicesIsMutable();
+          devices_.set(index, value);
           onChanged();
         } else {
-          topologyIdsBuilder_.setMessage(index, value);
+          devicesBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.Device devices = 3;</code>
        */
-      public Builder setTopologyIds(
-          int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
-          topologyIds_.set(index, builderForValue.build());
+      public Builder setDevices(
+          int index, context.ContextOuterClass.Device.Builder builderForValue) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
+          devices_.set(index, builderForValue.build());
           onChanged();
         } else {
-          topologyIdsBuilder_.setMessage(index, builderForValue.build());
+          devicesBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.Device devices = 3;</code>
        */
-      public Builder addTopologyIds(context.ContextOuterClass.TopologyId value) {
-        if (topologyIdsBuilder_ == null) {
+      public Builder addDevices(context.ContextOuterClass.Device value) {
+        if (devicesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureTopologyIdsIsMutable();
-          topologyIds_.add(value);
+          ensureDevicesIsMutable();
+          devices_.add(value);
           onChanged();
         } else {
-          topologyIdsBuilder_.addMessage(value);
+          devicesBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.Device devices = 3;</code>
        */
-      public Builder addTopologyIds(
-          int index, context.ContextOuterClass.TopologyId value) {
-        if (topologyIdsBuilder_ == null) {
+      public Builder addDevices(
+          int index, context.ContextOuterClass.Device value) {
+        if (devicesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureTopologyIdsIsMutable();
-          topologyIds_.add(index, value);
+          ensureDevicesIsMutable();
+          devices_.add(index, value);
           onChanged();
         } else {
-          topologyIdsBuilder_.addMessage(index, value);
+          devicesBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.Device devices = 3;</code>
        */
-      public Builder addTopologyIds(
-          context.ContextOuterClass.TopologyId.Builder builderForValue) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
-          topologyIds_.add(builderForValue.build());
+      public Builder addDevices(
+          context.ContextOuterClass.Device.Builder builderForValue) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
+          devices_.add(builderForValue.build());
           onChanged();
         } else {
-          topologyIdsBuilder_.addMessage(builderForValue.build());
+          devicesBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.Device devices = 3;</code>
        */
-      public Builder addTopologyIds(
-          int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
-          topologyIds_.add(index, builderForValue.build());
+      public Builder addDevices(
+          int index, context.ContextOuterClass.Device.Builder builderForValue) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
+          devices_.add(index, builderForValue.build());
           onChanged();
         } else {
-          topologyIdsBuilder_.addMessage(index, builderForValue.build());
+          devicesBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.Device devices = 3;</code>
        */
-      public Builder addAllTopologyIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.TopologyId> values) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
+      public Builder addAllDevices(
+          java.lang.Iterable<? extends context.ContextOuterClass.Device> values) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, topologyIds_);
+              values, devices_);
           onChanged();
         } else {
-          topologyIdsBuilder_.addAllMessages(values);
+          devicesBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.Device devices = 3;</code>
        */
-      public Builder clearTopologyIds() {
-        if (topologyIdsBuilder_ == null) {
-          topologyIds_ = java.util.Collections.emptyList();
+      public Builder clearDevices() {
+        if (devicesBuilder_ == null) {
+          devices_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          topologyIdsBuilder_.clear();
+          devicesBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.Device devices = 3;</code>
        */
-      public Builder removeTopologyIds(int index) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
-          topologyIds_.remove(index);
+      public Builder removeDevices(int index) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
+          devices_.remove(index);
           onChanged();
         } else {
-          topologyIdsBuilder_.remove(index);
+          devicesBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.Device devices = 3;</code>
        */
-      public context.ContextOuterClass.TopologyId.Builder getTopologyIdsBuilder(
+      public context.ContextOuterClass.Device.Builder getDevicesBuilder(
           int index) {
-        return getTopologyIdsFieldBuilder().getBuilder(index);
+        return getDevicesFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.Device devices = 3;</code>
        */
-      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
+      public context.ContextOuterClass.DeviceOrBuilder getDevicesOrBuilder(
           int index) {
-        if (topologyIdsBuilder_ == null) {
-          return topologyIds_.get(index);  } else {
-          return topologyIdsBuilder_.getMessageOrBuilder(index);
+        if (devicesBuilder_ == null) {
+          return devices_.get(index);  } else {
+          return devicesBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.Device devices = 3;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
-           getTopologyIdsOrBuilderList() {
-        if (topologyIdsBuilder_ != null) {
-          return topologyIdsBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.DeviceOrBuilder> 
+           getDevicesOrBuilderList() {
+        if (devicesBuilder_ != null) {
+          return devicesBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(topologyIds_);
+          return java.util.Collections.unmodifiableList(devices_);
         }
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.Device devices = 3;</code>
        */
-      public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder() {
-        return getTopologyIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.TopologyId.getDefaultInstance());
+      public context.ContextOuterClass.Device.Builder addDevicesBuilder() {
+        return getDevicesFieldBuilder().addBuilder(
+            context.ContextOuterClass.Device.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.Device devices = 3;</code>
        */
-      public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder(
+      public context.ContextOuterClass.Device.Builder addDevicesBuilder(
           int index) {
-        return getTopologyIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.TopologyId.getDefaultInstance());
+        return getDevicesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Device.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.Device devices = 3;</code>
        */
-      public java.util.List<context.ContextOuterClass.TopologyId.Builder> 
-           getTopologyIdsBuilderList() {
-        return getTopologyIdsFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.Device.Builder> 
+           getDevicesBuilderList() {
+        return getDevicesFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
-          getTopologyIdsFieldBuilder() {
-        if (topologyIdsBuilder_ == null) {
-          topologyIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
-                  topologyIds_,
+          context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder> 
+          getDevicesFieldBuilder() {
+        if (devicesBuilder_ == null) {
+          devicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder>(
+                  devices_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          topologyIds_ = null;
+          devices_ = null;
         }
-        return topologyIdsBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
+        return devicesBuilder_;
       }
 
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
+      private java.util.List<context.ContextOuterClass.Link> links_ =
+        java.util.Collections.emptyList();
+      private void ensureLinksIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          links_ = new java.util.ArrayList<context.ContextOuterClass.Link>(links_);
+          bitField0_ |= 0x00000002;
+         }
       }
 
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder> linksBuilder_;
 
-      // @@protoc_insertion_point(builder_scope:context.TopologyIdList)
-    }
-
-    // @@protoc_insertion_point(class_scope:context.TopologyIdList)
-    private static final context.ContextOuterClass.TopologyIdList DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyIdList();
-    }
-
-    public static context.ContextOuterClass.TopologyIdList getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<TopologyIdList>
-        PARSER = new com.google.protobuf.AbstractParser<TopologyIdList>() {
-      @java.lang.Override
-      public TopologyIdList parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new TopologyIdList(input, extensionRegistry);
+      /**
+       * <code>repeated .context.Link links = 4;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Link> getLinksList() {
+        if (linksBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(links_);
+        } else {
+          return linksBuilder_.getMessageList();
+        }
       }
-    };
-
-    public static com.google.protobuf.Parser<TopologyIdList> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<TopologyIdList> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public context.ContextOuterClass.TopologyIdList getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface TopologyListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.TopologyList)
-      com.google.protobuf.MessageOrBuilder {
+      /**
+       * <code>repeated .context.Link links = 4;</code>
+       */
+      public int getLinksCount() {
+        if (linksBuilder_ == null) {
+          return links_.size();
+        } else {
+          return linksBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.Link links = 4;</code>
+       */
+      public context.ContextOuterClass.Link getLinks(int index) {
+        if (linksBuilder_ == null) {
+          return links_.get(index);
+        } else {
+          return linksBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Link links = 4;</code>
+       */
+      public Builder setLinks(
+          int index, context.ContextOuterClass.Link value) {
+        if (linksBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinksIsMutable();
+          links_.set(index, value);
+          onChanged();
+        } else {
+          linksBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 4;</code>
+       */
+      public Builder setLinks(
+          int index, context.ContextOuterClass.Link.Builder builderForValue) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          linksBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 4;</code>
+       */
+      public Builder addLinks(context.ContextOuterClass.Link value) {
+        if (linksBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinksIsMutable();
+          links_.add(value);
+          onChanged();
+        } else {
+          linksBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 4;</code>
+       */
+      public Builder addLinks(
+          int index, context.ContextOuterClass.Link value) {
+        if (linksBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinksIsMutable();
+          links_.add(index, value);
+          onChanged();
+        } else {
+          linksBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 4;</code>
+       */
+      public Builder addLinks(
+          context.ContextOuterClass.Link.Builder builderForValue) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.add(builderForValue.build());
+          onChanged();
+        } else {
+          linksBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 4;</code>
+       */
+      public Builder addLinks(
+          int index, context.ContextOuterClass.Link.Builder builderForValue) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          linksBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 4;</code>
+       */
+      public Builder addAllLinks(
+          java.lang.Iterable<? extends context.ContextOuterClass.Link> values) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, links_);
+          onChanged();
+        } else {
+          linksBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 4;</code>
+       */
+      public Builder clearLinks() {
+        if (linksBuilder_ == null) {
+          links_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          linksBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 4;</code>
+       */
+      public Builder removeLinks(int index) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.remove(index);
+          onChanged();
+        } else {
+          linksBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 4;</code>
+       */
+      public context.ContextOuterClass.Link.Builder getLinksBuilder(
+          int index) {
+        return getLinksFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Link links = 4;</code>
+       */
+      public context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
+          int index) {
+        if (linksBuilder_ == null) {
+          return links_.get(index);  } else {
+          return linksBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Link links = 4;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
+           getLinksOrBuilderList() {
+        if (linksBuilder_ != null) {
+          return linksBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(links_);
+        }
+      }
+      /**
+       * <code>repeated .context.Link links = 4;</code>
+       */
+      public context.ContextOuterClass.Link.Builder addLinksBuilder() {
+        return getLinksFieldBuilder().addBuilder(
+            context.ContextOuterClass.Link.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Link links = 4;</code>
+       */
+      public context.ContextOuterClass.Link.Builder addLinksBuilder(
+          int index) {
+        return getLinksFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Link.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Link links = 4;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Link.Builder> 
+           getLinksBuilderList() {
+        return getLinksFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder> 
+          getLinksFieldBuilder() {
+        if (linksBuilder_ == null) {
+          linksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder>(
+                  links_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          links_ = null;
+        }
+        return linksBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.TopologyDetails)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.TopologyDetails)
+    private static final context.ContextOuterClass.TopologyDetails DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyDetails();
+    }
+
+    public static context.ContextOuterClass.TopologyDetails getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<TopologyDetails>
+        PARSER = new com.google.protobuf.AbstractParser<TopologyDetails>() {
+      @java.lang.Override
+      public TopologyDetails parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new TopologyDetails(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<TopologyDetails> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<TopologyDetails> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyDetails getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface TopologyIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.TopologyIdList)
+      com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.Topology topologies = 1;</code>
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
      */
-    java.util.List<context.ContextOuterClass.Topology> 
-        getTopologiesList();
+    java.util.List<context.ContextOuterClass.TopologyId> 
+        getTopologyIdsList();
     /**
-     * <code>repeated .context.Topology topologies = 1;</code>
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
      */
-    context.ContextOuterClass.Topology getTopologies(int index);
+    context.ContextOuterClass.TopologyId getTopologyIds(int index);
     /**
-     * <code>repeated .context.Topology topologies = 1;</code>
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
      */
-    int getTopologiesCount();
+    int getTopologyIdsCount();
     /**
-     * <code>repeated .context.Topology topologies = 1;</code>
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.TopologyOrBuilder> 
-        getTopologiesOrBuilderList();
+    java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
+        getTopologyIdsOrBuilderList();
     /**
-     * <code>repeated .context.Topology topologies = 1;</code>
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
      */
-    context.ContextOuterClass.TopologyOrBuilder getTopologiesOrBuilder(
+    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code context.TopologyList}
+   * Protobuf type {@code context.TopologyIdList}
    */
-  public static final class TopologyList extends
+  public static final class TopologyIdList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.TopologyList)
-      TopologyListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.TopologyIdList)
+      TopologyIdListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use TopologyList.newBuilder() to construct.
-    private TopologyList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use TopologyIdList.newBuilder() to construct.
+    private TopologyIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private TopologyList() {
-      topologies_ = java.util.Collections.emptyList();
+    private TopologyIdList() {
+      topologyIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new TopologyList();
+      return new TopologyIdList();
     }
 
     @java.lang.Override
@@ -10995,7 +12404,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private TopologyList(
+    private TopologyIdList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -11016,11 +12425,11 @@ public final class ContextOuterClass {
               break;
             case 10: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                topologies_ = new java.util.ArrayList<context.ContextOuterClass.Topology>();
+                topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              topologies_.add(
-                  input.readMessage(context.ContextOuterClass.Topology.parser(), extensionRegistry));
+              topologyIds_.add(
+                  input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -11039,7 +12448,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          topologies_ = java.util.Collections.unmodifiableList(topologies_);
+          topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -11047,55 +12456,55 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_TopologyList_descriptor;
+      return context.ContextOuterClass.internal_static_context_TopologyIdList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_TopologyList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_TopologyIdList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.TopologyList.class, context.ContextOuterClass.TopologyList.Builder.class);
+              context.ContextOuterClass.TopologyIdList.class, context.ContextOuterClass.TopologyIdList.Builder.class);
     }
 
-    public static final int TOPOLOGIES_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Topology> topologies_;
+    public static final int TOPOLOGY_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_;
     /**
-     * <code>repeated .context.Topology topologies = 1;</code>
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Topology> getTopologiesList() {
-      return topologies_;
+    public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
+      return topologyIds_;
     }
     /**
-     * <code>repeated .context.Topology topologies = 1;</code>
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.TopologyOrBuilder> 
-        getTopologiesOrBuilderList() {
-      return topologies_;
+    public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
+        getTopologyIdsOrBuilderList() {
+      return topologyIds_;
     }
     /**
-     * <code>repeated .context.Topology topologies = 1;</code>
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
      */
     @java.lang.Override
-    public int getTopologiesCount() {
-      return topologies_.size();
+    public int getTopologyIdsCount() {
+      return topologyIds_.size();
     }
     /**
-     * <code>repeated .context.Topology topologies = 1;</code>
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Topology getTopologies(int index) {
-      return topologies_.get(index);
+    public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
+      return topologyIds_.get(index);
     }
     /**
-     * <code>repeated .context.Topology topologies = 1;</code>
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.TopologyOrBuilder getTopologiesOrBuilder(
+    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
         int index) {
-      return topologies_.get(index);
+      return topologyIds_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -11112,8 +12521,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < topologies_.size(); i++) {
-        output.writeMessage(1, topologies_.get(i));
+      for (int i = 0; i < topologyIds_.size(); i++) {
+        output.writeMessage(1, topologyIds_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -11124,9 +12533,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < topologies_.size(); i++) {
+      for (int i = 0; i < topologyIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, topologies_.get(i));
+          .computeMessageSize(1, topologyIds_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -11138,13 +12547,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.TopologyList)) {
+      if (!(obj instanceof context.ContextOuterClass.TopologyIdList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.TopologyList other = (context.ContextOuterClass.TopologyList) obj;
+      context.ContextOuterClass.TopologyIdList other = (context.ContextOuterClass.TopologyIdList) obj;
 
-      if (!getTopologiesList()
-          .equals(other.getTopologiesList())) return false;
+      if (!getTopologyIdsList()
+          .equals(other.getTopologyIdsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -11156,78 +12565,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getTopologiesCount() > 0) {
-        hash = (37 * hash) + TOPOLOGIES_FIELD_NUMBER;
-        hash = (53 * hash) + getTopologiesList().hashCode();
+      if (getTopologyIdsCount() > 0) {
+        hash = (37 * hash) + TOPOLOGY_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyIdsList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.TopologyList parseFrom(
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyList parseFrom(
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyList parseFrom(
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyList parseFrom(
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyList parseFrom(byte[] data)
+    public static context.ContextOuterClass.TopologyIdList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyList parseFrom(
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.TopologyIdList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyList parseFrom(
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.TopologyIdList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyList parseDelimitedFrom(
+    public static context.ContextOuterClass.TopologyIdList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyList parseFrom(
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyList parseFrom(
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -11240,7 +12649,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.TopologyList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.TopologyIdList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -11256,26 +12665,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.TopologyList}
+     * Protobuf type {@code context.TopologyIdList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.TopologyList)
-        context.ContextOuterClass.TopologyListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.TopologyIdList)
+        context.ContextOuterClass.TopologyIdListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_TopologyList_descriptor;
+        return context.ContextOuterClass.internal_static_context_TopologyIdList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_TopologyList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_TopologyIdList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.TopologyList.class, context.ContextOuterClass.TopologyList.Builder.class);
+                context.ContextOuterClass.TopologyIdList.class, context.ContextOuterClass.TopologyIdList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.TopologyList.newBuilder()
+      // Construct using context.ContextOuterClass.TopologyIdList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -11288,17 +12697,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getTopologiesFieldBuilder();
+          getTopologyIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (topologiesBuilder_ == null) {
-          topologies_ = java.util.Collections.emptyList();
+        if (topologyIdsBuilder_ == null) {
+          topologyIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          topologiesBuilder_.clear();
+          topologyIdsBuilder_.clear();
         }
         return this;
       }
@@ -11306,17 +12715,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_TopologyList_descriptor;
+        return context.ContextOuterClass.internal_static_context_TopologyIdList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyList getDefaultInstanceForType() {
-        return context.ContextOuterClass.TopologyList.getDefaultInstance();
+      public context.ContextOuterClass.TopologyIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.TopologyIdList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyList build() {
-        context.ContextOuterClass.TopologyList result = buildPartial();
+      public context.ContextOuterClass.TopologyIdList build() {
+        context.ContextOuterClass.TopologyIdList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -11324,17 +12733,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyList buildPartial() {
-        context.ContextOuterClass.TopologyList result = new context.ContextOuterClass.TopologyList(this);
+      public context.ContextOuterClass.TopologyIdList buildPartial() {
+        context.ContextOuterClass.TopologyIdList result = new context.ContextOuterClass.TopologyIdList(this);
         int from_bitField0_ = bitField0_;
-        if (topologiesBuilder_ == null) {
+        if (topologyIdsBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            topologies_ = java.util.Collections.unmodifiableList(topologies_);
+            topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.topologies_ = topologies_;
+          result.topologyIds_ = topologyIds_;
         } else {
-          result.topologies_ = topologiesBuilder_.build();
+          result.topologyIds_ = topologyIdsBuilder_.build();
         }
         onBuilt();
         return result;
@@ -11374,39 +12783,39 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.TopologyList) {
-          return mergeFrom((context.ContextOuterClass.TopologyList)other);
+        if (other instanceof context.ContextOuterClass.TopologyIdList) {
+          return mergeFrom((context.ContextOuterClass.TopologyIdList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.TopologyList other) {
-        if (other == context.ContextOuterClass.TopologyList.getDefaultInstance()) return this;
-        if (topologiesBuilder_ == null) {
-          if (!other.topologies_.isEmpty()) {
-            if (topologies_.isEmpty()) {
-              topologies_ = other.topologies_;
+      public Builder mergeFrom(context.ContextOuterClass.TopologyIdList other) {
+        if (other == context.ContextOuterClass.TopologyIdList.getDefaultInstance()) return this;
+        if (topologyIdsBuilder_ == null) {
+          if (!other.topologyIds_.isEmpty()) {
+            if (topologyIds_.isEmpty()) {
+              topologyIds_ = other.topologyIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureTopologiesIsMutable();
-              topologies_.addAll(other.topologies_);
+              ensureTopologyIdsIsMutable();
+              topologyIds_.addAll(other.topologyIds_);
             }
             onChanged();
           }
         } else {
-          if (!other.topologies_.isEmpty()) {
-            if (topologiesBuilder_.isEmpty()) {
-              topologiesBuilder_.dispose();
-              topologiesBuilder_ = null;
-              topologies_ = other.topologies_;
+          if (!other.topologyIds_.isEmpty()) {
+            if (topologyIdsBuilder_.isEmpty()) {
+              topologyIdsBuilder_.dispose();
+              topologyIdsBuilder_ = null;
+              topologyIds_ = other.topologyIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              topologiesBuilder_ = 
+              topologyIdsBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getTopologiesFieldBuilder() : null;
+                   getTopologyIdsFieldBuilder() : null;
             } else {
-              topologiesBuilder_.addAllMessages(other.topologies_);
+              topologyIdsBuilder_.addAllMessages(other.topologyIds_);
             }
           }
         }
@@ -11425,11 +12834,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.TopologyList parsedMessage = null;
+        context.ContextOuterClass.TopologyIdList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.TopologyList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.TopologyIdList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -11440,244 +12849,244 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.Topology> topologies_ =
+      private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_ =
         java.util.Collections.emptyList();
-      private void ensureTopologiesIsMutable() {
+      private void ensureTopologyIdsIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          topologies_ = new java.util.ArrayList<context.ContextOuterClass.Topology>(topologies_);
+          topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>(topologyIds_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Topology, context.ContextOuterClass.Topology.Builder, context.ContextOuterClass.TopologyOrBuilder> topologiesBuilder_;
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdsBuilder_;
 
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.Topology> getTopologiesList() {
-        if (topologiesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(topologies_);
+      public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
+        if (topologyIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(topologyIds_);
         } else {
-          return topologiesBuilder_.getMessageList();
+          return topologyIdsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
        */
-      public int getTopologiesCount() {
-        if (topologiesBuilder_ == null) {
-          return topologies_.size();
+      public int getTopologyIdsCount() {
+        if (topologyIdsBuilder_ == null) {
+          return topologyIds_.size();
         } else {
-          return topologiesBuilder_.getCount();
+          return topologyIdsBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
        */
-      public context.ContextOuterClass.Topology getTopologies(int index) {
-        if (topologiesBuilder_ == null) {
-          return topologies_.get(index);
+      public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
+        if (topologyIdsBuilder_ == null) {
+          return topologyIds_.get(index);
         } else {
-          return topologiesBuilder_.getMessage(index);
+          return topologyIdsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
        */
-      public Builder setTopologies(
-          int index, context.ContextOuterClass.Topology value) {
-        if (topologiesBuilder_ == null) {
+      public Builder setTopologyIds(
+          int index, context.ContextOuterClass.TopologyId value) {
+        if (topologyIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureTopologiesIsMutable();
-          topologies_.set(index, value);
+          ensureTopologyIdsIsMutable();
+          topologyIds_.set(index, value);
           onChanged();
         } else {
-          topologiesBuilder_.setMessage(index, value);
+          topologyIdsBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
        */
-      public Builder setTopologies(
-          int index, context.ContextOuterClass.Topology.Builder builderForValue) {
-        if (topologiesBuilder_ == null) {
-          ensureTopologiesIsMutable();
-          topologies_.set(index, builderForValue.build());
+      public Builder setTopologyIds(
+          int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          topologiesBuilder_.setMessage(index, builderForValue.build());
+          topologyIdsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
        */
-      public Builder addTopologies(context.ContextOuterClass.Topology value) {
-        if (topologiesBuilder_ == null) {
+      public Builder addTopologyIds(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureTopologiesIsMutable();
-          topologies_.add(value);
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(value);
           onChanged();
         } else {
-          topologiesBuilder_.addMessage(value);
+          topologyIdsBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
        */
-      public Builder addTopologies(
-          int index, context.ContextOuterClass.Topology value) {
-        if (topologiesBuilder_ == null) {
+      public Builder addTopologyIds(
+          int index, context.ContextOuterClass.TopologyId value) {
+        if (topologyIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureTopologiesIsMutable();
-          topologies_.add(index, value);
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(index, value);
           onChanged();
         } else {
-          topologiesBuilder_.addMessage(index, value);
+          topologyIdsBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
        */
-      public Builder addTopologies(
-          context.ContextOuterClass.Topology.Builder builderForValue) {
-        if (topologiesBuilder_ == null) {
-          ensureTopologiesIsMutable();
-          topologies_.add(builderForValue.build());
+      public Builder addTopologyIds(
+          context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(builderForValue.build());
           onChanged();
         } else {
-          topologiesBuilder_.addMessage(builderForValue.build());
+          topologyIdsBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
        */
-      public Builder addTopologies(
-          int index, context.ContextOuterClass.Topology.Builder builderForValue) {
-        if (topologiesBuilder_ == null) {
-          ensureTopologiesIsMutable();
-          topologies_.add(index, builderForValue.build());
+      public Builder addTopologyIds(
+          int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(index, builderForValue.build());
           onChanged();
         } else {
-          topologiesBuilder_.addMessage(index, builderForValue.build());
+          topologyIdsBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
        */
-      public Builder addAllTopologies(
-          java.lang.Iterable<? extends context.ContextOuterClass.Topology> values) {
-        if (topologiesBuilder_ == null) {
-          ensureTopologiesIsMutable();
+      public Builder addAllTopologyIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.TopologyId> values) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, topologies_);
+              values, topologyIds_);
           onChanged();
         } else {
-          topologiesBuilder_.addAllMessages(values);
+          topologyIdsBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
        */
-      public Builder clearTopologies() {
-        if (topologiesBuilder_ == null) {
-          topologies_ = java.util.Collections.emptyList();
+      public Builder clearTopologyIds() {
+        if (topologyIdsBuilder_ == null) {
+          topologyIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          topologiesBuilder_.clear();
+          topologyIdsBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
        */
-      public Builder removeTopologies(int index) {
-        if (topologiesBuilder_ == null) {
-          ensureTopologiesIsMutable();
-          topologies_.remove(index);
+      public Builder removeTopologyIds(int index) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.remove(index);
           onChanged();
         } else {
-          topologiesBuilder_.remove(index);
+          topologyIdsBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
        */
-      public context.ContextOuterClass.Topology.Builder getTopologiesBuilder(
+      public context.ContextOuterClass.TopologyId.Builder getTopologyIdsBuilder(
           int index) {
-        return getTopologiesFieldBuilder().getBuilder(index);
+        return getTopologyIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
        */
-      public context.ContextOuterClass.TopologyOrBuilder getTopologiesOrBuilder(
+      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
           int index) {
-        if (topologiesBuilder_ == null) {
-          return topologies_.get(index);  } else {
-          return topologiesBuilder_.getMessageOrBuilder(index);
+        if (topologyIdsBuilder_ == null) {
+          return topologyIds_.get(index);  } else {
+          return topologyIdsBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.TopologyOrBuilder> 
-           getTopologiesOrBuilderList() {
-        if (topologiesBuilder_ != null) {
-          return topologiesBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
+           getTopologyIdsOrBuilderList() {
+        if (topologyIdsBuilder_ != null) {
+          return topologyIdsBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(topologies_);
+          return java.util.Collections.unmodifiableList(topologyIds_);
         }
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
        */
-      public context.ContextOuterClass.Topology.Builder addTopologiesBuilder() {
-        return getTopologiesFieldBuilder().addBuilder(
-            context.ContextOuterClass.Topology.getDefaultInstance());
+      public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder() {
+        return getTopologyIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.TopologyId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
        */
-      public context.ContextOuterClass.Topology.Builder addTopologiesBuilder(
+      public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder(
           int index) {
-        return getTopologiesFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Topology.getDefaultInstance());
+        return getTopologyIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.TopologyId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.Topology.Builder> 
-           getTopologiesBuilderList() {
-        return getTopologiesFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.TopologyId.Builder> 
+           getTopologyIdsBuilderList() {
+        return getTopologyIdsFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Topology, context.ContextOuterClass.Topology.Builder, context.ContextOuterClass.TopologyOrBuilder> 
-          getTopologiesFieldBuilder() {
-        if (topologiesBuilder_ == null) {
-          topologiesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Topology, context.ContextOuterClass.Topology.Builder, context.ContextOuterClass.TopologyOrBuilder>(
-                  topologies_,
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
+          getTopologyIdsFieldBuilder() {
+        if (topologyIdsBuilder_ == null) {
+          topologyIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
+                  topologyIds_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          topologies_ = null;
+          topologyIds_ = null;
         }
-        return topologiesBuilder_;
+        return topologyIdsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -11692,100 +13101,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.TopologyList)
+      // @@protoc_insertion_point(builder_scope:context.TopologyIdList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.TopologyList)
-    private static final context.ContextOuterClass.TopologyList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.TopologyIdList)
+    private static final context.ContextOuterClass.TopologyIdList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyIdList();
     }
 
-    public static context.ContextOuterClass.TopologyList getDefaultInstance() {
+    public static context.ContextOuterClass.TopologyIdList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<TopologyList>
-        PARSER = new com.google.protobuf.AbstractParser<TopologyList>() {
+    private static final com.google.protobuf.Parser<TopologyIdList>
+        PARSER = new com.google.protobuf.AbstractParser<TopologyIdList>() {
       @java.lang.Override
-      public TopologyList parsePartialFrom(
+      public TopologyIdList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new TopologyList(input, extensionRegistry);
+        return new TopologyIdList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<TopologyList> parser() {
+    public static com.google.protobuf.Parser<TopologyIdList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<TopologyList> getParserForType() {
+    public com.google.protobuf.Parser<TopologyIdList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.TopologyList getDefaultInstanceForType() {
+    public context.ContextOuterClass.TopologyIdList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface TopologyEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.TopologyEvent)
+  public interface TopologyListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.TopologyList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
-     */
-    boolean hasEvent();
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>repeated .context.Topology topologies = 1;</code>
      */
-    context.ContextOuterClass.Event getEvent();
+    java.util.List<context.ContextOuterClass.Topology> 
+        getTopologiesList();
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>repeated .context.Topology topologies = 1;</code>
      */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
-
+    context.ContextOuterClass.Topology getTopologies(int index);
     /**
-     * <code>.context.TopologyId topology_id = 2;</code>
-     * @return Whether the topologyId field is set.
+     * <code>repeated .context.Topology topologies = 1;</code>
      */
-    boolean hasTopologyId();
+    int getTopologiesCount();
     /**
-     * <code>.context.TopologyId topology_id = 2;</code>
-     * @return The topologyId.
+     * <code>repeated .context.Topology topologies = 1;</code>
      */
-    context.ContextOuterClass.TopologyId getTopologyId();
+    java.util.List<? extends context.ContextOuterClass.TopologyOrBuilder> 
+        getTopologiesOrBuilderList();
     /**
-     * <code>.context.TopologyId topology_id = 2;</code>
+     * <code>repeated .context.Topology topologies = 1;</code>
      */
-    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
+    context.ContextOuterClass.TopologyOrBuilder getTopologiesOrBuilder(
+        int index);
   }
   /**
-   * Protobuf type {@code context.TopologyEvent}
+   * Protobuf type {@code context.TopologyList}
    */
-  public static final class TopologyEvent extends
+  public static final class TopologyList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.TopologyEvent)
-      TopologyEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.TopologyList)
+      TopologyListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use TopologyEvent.newBuilder() to construct.
-    private TopologyEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use TopologyList.newBuilder() to construct.
+    private TopologyList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private TopologyEvent() {
+    private TopologyList() {
+      topologies_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new TopologyEvent();
+      return new TopologyList();
     }
 
     @java.lang.Override
@@ -11793,7 +13197,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private TopologyEvent(
+    private TopologyList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -11801,6 +13205,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -11812,29 +13217,12 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Event.Builder subBuilder = null;
-              if (event_ != null) {
-                subBuilder = event_.toBuilder();
-              }
-              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(event_);
-                event_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
-              if (topologyId_ != null) {
-                subBuilder = topologyId_.toBuilder();
-              }
-              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(topologyId_);
-                topologyId_ = subBuilder.buildPartial();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                topologies_ = new java.util.ArrayList<context.ContextOuterClass.Topology>();
+                mutable_bitField0_ |= 0x00000001;
               }
-
+              topologies_.add(
+                  input.readMessage(context.ContextOuterClass.Topology.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -11852,73 +13240,64 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          topologies_ = java.util.Collections.unmodifiableList(topologies_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_TopologyEvent_descriptor;
+      return context.ContextOuterClass.internal_static_context_TopologyList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_TopologyEvent_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_TopologyList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.TopologyEvent.class, context.ContextOuterClass.TopologyEvent.Builder.class);
+              context.ContextOuterClass.TopologyList.class, context.ContextOuterClass.TopologyList.Builder.class);
     }
 
-    public static final int EVENT_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Event event_;
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
-     */
-    @java.lang.Override
-    public boolean hasEvent() {
-      return event_ != null;
-    }
+    public static final int TOPOLOGIES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Topology> topologies_;
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>repeated .context.Topology topologies = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    public java.util.List<context.ContextOuterClass.Topology> getTopologiesList() {
+      return topologies_;
     }
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>repeated .context.Topology topologies = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
+    public java.util.List<? extends context.ContextOuterClass.TopologyOrBuilder> 
+        getTopologiesOrBuilderList() {
+      return topologies_;
     }
-
-    public static final int TOPOLOGY_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.TopologyId topologyId_;
     /**
-     * <code>.context.TopologyId topology_id = 2;</code>
-     * @return Whether the topologyId field is set.
+     * <code>repeated .context.Topology topologies = 1;</code>
      */
     @java.lang.Override
-    public boolean hasTopologyId() {
-      return topologyId_ != null;
+    public int getTopologiesCount() {
+      return topologies_.size();
     }
     /**
-     * <code>.context.TopologyId topology_id = 2;</code>
-     * @return The topologyId.
+     * <code>repeated .context.Topology topologies = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.TopologyId getTopologyId() {
-      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+    public context.ContextOuterClass.Topology getTopologies(int index) {
+      return topologies_.get(index);
     }
     /**
-     * <code>.context.TopologyId topology_id = 2;</code>
+     * <code>repeated .context.Topology topologies = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-      return getTopologyId();
+    public context.ContextOuterClass.TopologyOrBuilder getTopologiesOrBuilder(
+        int index) {
+      return topologies_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -11935,11 +13314,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (event_ != null) {
-        output.writeMessage(1, getEvent());
-      }
-      if (topologyId_ != null) {
-        output.writeMessage(2, getTopologyId());
+      for (int i = 0; i < topologies_.size(); i++) {
+        output.writeMessage(1, topologies_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -11950,13 +13326,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (event_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
-      }
-      if (topologyId_ != null) {
+      for (int i = 0; i < topologies_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getTopologyId());
+          .computeMessageSize(1, topologies_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -11968,21 +13340,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.TopologyEvent)) {
+      if (!(obj instanceof context.ContextOuterClass.TopologyList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.TopologyEvent other = (context.ContextOuterClass.TopologyEvent) obj;
+      context.ContextOuterClass.TopologyList other = (context.ContextOuterClass.TopologyList) obj;
 
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) return false;
-      }
-      if (hasTopologyId() != other.hasTopologyId()) return false;
-      if (hasTopologyId()) {
-        if (!getTopologyId()
-            .equals(other.getTopologyId())) return false;
-      }
+      if (!getTopologiesList()
+          .equals(other.getTopologiesList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -11994,82 +13358,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEvent()) {
-        hash = (37 * hash) + EVENT_FIELD_NUMBER;
-        hash = (53 * hash) + getEvent().hashCode();
-      }
-      if (hasTopologyId()) {
-        hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getTopologyId().hashCode();
+      if (getTopologiesCount() > 0) {
+        hash = (37 * hash) + TOPOLOGIES_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologiesList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.TopologyEvent parseFrom(
+    public static context.ContextOuterClass.TopologyList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(
+    public static context.ContextOuterClass.TopologyList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(
+    public static context.ContextOuterClass.TopologyList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(
+    public static context.ContextOuterClass.TopologyList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(byte[] data)
+    public static context.ContextOuterClass.TopologyList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(
+    public static context.ContextOuterClass.TopologyList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.TopologyList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(
+    public static context.ContextOuterClass.TopologyList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyEvent parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.TopologyList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyEvent parseDelimitedFrom(
+    public static context.ContextOuterClass.TopologyList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(
+    public static context.ContextOuterClass.TopologyList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(
+    public static context.ContextOuterClass.TopologyList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -12082,7 +13442,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.TopologyEvent prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.TopologyList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -12098,26 +13458,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.TopologyEvent}
+     * Protobuf type {@code context.TopologyList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.TopologyEvent)
-        context.ContextOuterClass.TopologyEventOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.TopologyList)
+        context.ContextOuterClass.TopologyListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_TopologyEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_TopologyList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_TopologyEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_TopologyList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.TopologyEvent.class, context.ContextOuterClass.TopologyEvent.Builder.class);
+                context.ContextOuterClass.TopologyList.class, context.ContextOuterClass.TopologyList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.TopologyEvent.newBuilder()
+      // Construct using context.ContextOuterClass.TopologyList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -12130,22 +13490,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getTopologiesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
-        } else {
-          event_ = null;
-          eventBuilder_ = null;
-        }
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = null;
+        if (topologiesBuilder_ == null) {
+          topologies_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          topologyId_ = null;
-          topologyIdBuilder_ = null;
+          topologiesBuilder_.clear();
         }
         return this;
       }
@@ -12153,17 +13508,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_TopologyEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_TopologyList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.TopologyEvent.getDefaultInstance();
+      public context.ContextOuterClass.TopologyList getDefaultInstanceForType() {
+        return context.ContextOuterClass.TopologyList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyEvent build() {
-        context.ContextOuterClass.TopologyEvent result = buildPartial();
+      public context.ContextOuterClass.TopologyList build() {
+        context.ContextOuterClass.TopologyList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -12171,17 +13526,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyEvent buildPartial() {
-        context.ContextOuterClass.TopologyEvent result = new context.ContextOuterClass.TopologyEvent(this);
-        if (eventBuilder_ == null) {
-          result.event_ = event_;
-        } else {
-          result.event_ = eventBuilder_.build();
-        }
-        if (topologyIdBuilder_ == null) {
-          result.topologyId_ = topologyId_;
+      public context.ContextOuterClass.TopologyList buildPartial() {
+        context.ContextOuterClass.TopologyList result = new context.ContextOuterClass.TopologyList(this);
+        int from_bitField0_ = bitField0_;
+        if (topologiesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            topologies_ = java.util.Collections.unmodifiableList(topologies_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.topologies_ = topologies_;
         } else {
-          result.topologyId_ = topologyIdBuilder_.build();
+          result.topologies_ = topologiesBuilder_.build();
         }
         onBuilt();
         return result;
@@ -12221,21 +13576,41 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.TopologyEvent) {
-          return mergeFrom((context.ContextOuterClass.TopologyEvent)other);
+        if (other instanceof context.ContextOuterClass.TopologyList) {
+          return mergeFrom((context.ContextOuterClass.TopologyList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.TopologyEvent other) {
-        if (other == context.ContextOuterClass.TopologyEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
-        }
-        if (other.hasTopologyId()) {
-          mergeTopologyId(other.getTopologyId());
+      public Builder mergeFrom(context.ContextOuterClass.TopologyList other) {
+        if (other == context.ContextOuterClass.TopologyList.getDefaultInstance()) return this;
+        if (topologiesBuilder_ == null) {
+          if (!other.topologies_.isEmpty()) {
+            if (topologies_.isEmpty()) {
+              topologies_ = other.topologies_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureTopologiesIsMutable();
+              topologies_.addAll(other.topologies_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.topologies_.isEmpty()) {
+            if (topologiesBuilder_.isEmpty()) {
+              topologiesBuilder_.dispose();
+              topologiesBuilder_ = null;
+              topologies_ = other.topologies_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              topologiesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getTopologiesFieldBuilder() : null;
+            } else {
+              topologiesBuilder_.addAllMessages(other.topologies_);
+            }
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -12252,11 +13627,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.TopologyEvent parsedMessage = null;
+        context.ContextOuterClass.TopologyList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.TopologyEvent) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.TopologyList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -12265,243 +13640,246 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.Topology> topologies_ =
+        java.util.Collections.emptyList();
+      private void ensureTopologiesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          topologies_ = new java.util.ArrayList<context.ContextOuterClass.Topology>(topologies_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Topology, context.ContextOuterClass.Topology.Builder, context.ContextOuterClass.TopologyOrBuilder> topologiesBuilder_;
 
-      private context.ContextOuterClass.Event event_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return Whether the event field is set.
+       * <code>repeated .context.Topology topologies = 1;</code>
        */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
+      public java.util.List<context.ContextOuterClass.Topology> getTopologiesList() {
+        if (topologiesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(topologies_);
+        } else {
+          return topologiesBuilder_.getMessageList();
+        }
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
+       * <code>repeated .context.Topology topologies = 1;</code>
        */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+      public int getTopologiesCount() {
+        if (topologiesBuilder_ == null) {
+          return topologies_.size();
         } else {
-          return eventBuilder_.getMessage();
+          return topologiesBuilder_.getCount();
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Topology topologies = 1;</code>
        */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
+      public context.ContextOuterClass.Topology getTopologies(int index) {
+        if (topologiesBuilder_ == null) {
+          return topologies_.get(index);
+        } else {
+          return topologiesBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder setTopologies(
+          int index, context.ContextOuterClass.Topology value) {
+        if (topologiesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          event_ = value;
+          ensureTopologiesIsMutable();
+          topologies_.set(index, value);
           onChanged();
         } else {
-          eventBuilder_.setMessage(value);
+          topologiesBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Topology topologies = 1;</code>
        */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
+      public Builder setTopologies(
+          int index, context.ContextOuterClass.Topology.Builder builderForValue) {
+        if (topologiesBuilder_ == null) {
+          ensureTopologiesIsMutable();
+          topologies_.set(index, builderForValue.build());
           onChanged();
         } else {
-          eventBuilder_.setMessage(builderForValue.build());
+          topologiesBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Topology topologies = 1;</code>
        */
-      public Builder mergeEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
-          if (event_ != null) {
-            event_ =
-              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
-          } else {
-            event_ = value;
+      public Builder addTopologies(context.ContextOuterClass.Topology value) {
+        if (topologiesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureTopologiesIsMutable();
+          topologies_.add(value);
           onChanged();
         } else {
-          eventBuilder_.mergeFrom(value);
+          topologiesBuilder_.addMessage(value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Topology topologies = 1;</code>
        */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
+      public Builder addTopologies(
+          int index, context.ContextOuterClass.Topology value) {
+        if (topologiesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologiesIsMutable();
+          topologies_.add(index, value);
           onChanged();
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          topologiesBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       */
-      public context.ContextOuterClass.Event.Builder getEventBuilder() {
-        
-        onChanged();
-        return getEventFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Topology topologies = 1;</code>
        */
-      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-        if (eventBuilder_ != null) {
-          return eventBuilder_.getMessageOrBuilder();
+      public Builder addTopologies(
+          context.ContextOuterClass.Topology.Builder builderForValue) {
+        if (topologiesBuilder_ == null) {
+          ensureTopologiesIsMutable();
+          topologies_.add(builderForValue.build());
+          onChanged();
         } else {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+          topologiesBuilder_.addMessage(builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Topology topologies = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
-          getEventFieldBuilder() {
-        if (eventBuilder_ == null) {
-          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
-                  getEvent(),
-                  getParentForChildren(),
-                  isClean());
-          event_ = null;
+      public Builder addTopologies(
+          int index, context.ContextOuterClass.Topology.Builder builderForValue) {
+        if (topologiesBuilder_ == null) {
+          ensureTopologiesIsMutable();
+          topologies_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          topologiesBuilder_.addMessage(index, builderForValue.build());
         }
-        return eventBuilder_;
-      }
-
-      private context.ContextOuterClass.TopologyId topologyId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdBuilder_;
-      /**
-       * <code>.context.TopologyId topology_id = 2;</code>
-       * @return Whether the topologyId field is set.
-       */
-      public boolean hasTopologyId() {
-        return topologyIdBuilder_ != null || topologyId_ != null;
+        return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 2;</code>
-       * @return The topologyId.
+       * <code>repeated .context.Topology topologies = 1;</code>
        */
-      public context.ContextOuterClass.TopologyId getTopologyId() {
-        if (topologyIdBuilder_ == null) {
-          return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+      public Builder addAllTopologies(
+          java.lang.Iterable<? extends context.ContextOuterClass.Topology> values) {
+        if (topologiesBuilder_ == null) {
+          ensureTopologiesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, topologies_);
+          onChanged();
         } else {
-          return topologyIdBuilder_.getMessage();
+          topologiesBuilder_.addAllMessages(values);
         }
+        return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 2;</code>
+       * <code>repeated .context.Topology topologies = 1;</code>
        */
-      public Builder setTopologyId(context.ContextOuterClass.TopologyId value) {
-        if (topologyIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          topologyId_ = value;
+      public Builder clearTopologies() {
+        if (topologiesBuilder_ == null) {
+          topologies_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          topologyIdBuilder_.setMessage(value);
+          topologiesBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 2;</code>
+       * <code>repeated .context.Topology topologies = 1;</code>
        */
-      public Builder setTopologyId(
-          context.ContextOuterClass.TopologyId.Builder builderForValue) {
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = builderForValue.build();
+      public Builder removeTopologies(int index) {
+        if (topologiesBuilder_ == null) {
+          ensureTopologiesIsMutable();
+          topologies_.remove(index);
           onChanged();
         } else {
-          topologyIdBuilder_.setMessage(builderForValue.build());
+          topologiesBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 2;</code>
+       * <code>repeated .context.Topology topologies = 1;</code>
        */
-      public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
-        if (topologyIdBuilder_ == null) {
-          if (topologyId_ != null) {
-            topologyId_ =
-              context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
-          } else {
-            topologyId_ = value;
-          }
-          onChanged();
-        } else {
-          topologyIdBuilder_.mergeFrom(value);
+      public context.ContextOuterClass.Topology.Builder getTopologiesBuilder(
+          int index) {
+        return getTopologiesFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyOrBuilder getTopologiesOrBuilder(
+          int index) {
+        if (topologiesBuilder_ == null) {
+          return topologies_.get(index);  } else {
+          return topologiesBuilder_.getMessageOrBuilder(index);
         }
-
-        return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 2;</code>
+       * <code>repeated .context.Topology topologies = 1;</code>
        */
-      public Builder clearTopologyId() {
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = null;
-          onChanged();
+      public java.util.List<? extends context.ContextOuterClass.TopologyOrBuilder> 
+           getTopologiesOrBuilderList() {
+        if (topologiesBuilder_ != null) {
+          return topologiesBuilder_.getMessageOrBuilderList();
         } else {
-          topologyId_ = null;
-          topologyIdBuilder_ = null;
+          return java.util.Collections.unmodifiableList(topologies_);
         }
-
-        return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 2;</code>
+       * <code>repeated .context.Topology topologies = 1;</code>
        */
-      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
-        
-        onChanged();
-        return getTopologyIdFieldBuilder().getBuilder();
+      public context.ContextOuterClass.Topology.Builder addTopologiesBuilder() {
+        return getTopologiesFieldBuilder().addBuilder(
+            context.ContextOuterClass.Topology.getDefaultInstance());
       }
       /**
-       * <code>.context.TopologyId topology_id = 2;</code>
+       * <code>repeated .context.Topology topologies = 1;</code>
        */
-      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-        if (topologyIdBuilder_ != null) {
-          return topologyIdBuilder_.getMessageOrBuilder();
-        } else {
-          return topologyId_ == null ?
-              context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
-        }
+      public context.ContextOuterClass.Topology.Builder addTopologiesBuilder(
+          int index) {
+        return getTopologiesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Topology.getDefaultInstance());
       }
       /**
-       * <code>.context.TopologyId topology_id = 2;</code>
+       * <code>repeated .context.Topology topologies = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
-          getTopologyIdFieldBuilder() {
-        if (topologyIdBuilder_ == null) {
-          topologyIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
-                  getTopologyId(),
+      public java.util.List<context.ContextOuterClass.Topology.Builder> 
+           getTopologiesBuilderList() {
+        return getTopologiesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Topology, context.ContextOuterClass.Topology.Builder, context.ContextOuterClass.TopologyOrBuilder> 
+          getTopologiesFieldBuilder() {
+        if (topologiesBuilder_ == null) {
+          topologiesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Topology, context.ContextOuterClass.Topology.Builder, context.ContextOuterClass.TopologyOrBuilder>(
+                  topologies_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          topologyId_ = null;
+          topologies_ = null;
         }
-        return topologyIdBuilder_;
+        return topologiesBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -12516,89 +13894,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.TopologyEvent)
+      // @@protoc_insertion_point(builder_scope:context.TopologyList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.TopologyEvent)
-    private static final context.ContextOuterClass.TopologyEvent DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.TopologyList)
+    private static final context.ContextOuterClass.TopologyList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyEvent();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyList();
     }
 
-    public static context.ContextOuterClass.TopologyEvent getDefaultInstance() {
+    public static context.ContextOuterClass.TopologyList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<TopologyEvent>
-        PARSER = new com.google.protobuf.AbstractParser<TopologyEvent>() {
+    private static final com.google.protobuf.Parser<TopologyList>
+        PARSER = new com.google.protobuf.AbstractParser<TopologyList>() {
       @java.lang.Override
-      public TopologyEvent parsePartialFrom(
+      public TopologyList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new TopologyEvent(input, extensionRegistry);
+        return new TopologyList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<TopologyEvent> parser() {
+    public static com.google.protobuf.Parser<TopologyList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<TopologyEvent> getParserForType() {
+    public com.google.protobuf.Parser<TopologyList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.TopologyEvent getDefaultInstanceForType() {
+    public context.ContextOuterClass.TopologyList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface DeviceIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.DeviceId)
+  public interface TopologyEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.TopologyEvent)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Uuid device_uuid = 1;</code>
-     * @return Whether the deviceUuid field is set.
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
-    boolean hasDeviceUuid();
+    boolean hasEvent();
     /**
-     * <code>.context.Uuid device_uuid = 1;</code>
-     * @return The deviceUuid.
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
-    context.ContextOuterClass.Uuid getDeviceUuid();
+    context.ContextOuterClass.Event getEvent();
     /**
-     * <code>.context.Uuid device_uuid = 1;</code>
+     * <code>.context.Event event = 1;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getDeviceUuidOrBuilder();
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
+    /**
+     * <code>.context.TopologyId topology_id = 2;</code>
+     * @return Whether the topologyId field is set.
+     */
+    boolean hasTopologyId();
+    /**
+     * <code>.context.TopologyId topology_id = 2;</code>
+     * @return The topologyId.
+     */
+    context.ContextOuterClass.TopologyId getTopologyId();
+    /**
+     * <code>.context.TopologyId topology_id = 2;</code>
+     */
+    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
   }
   /**
-   * <pre>
-   * ----- Device --------------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.DeviceId}
+   * Protobuf type {@code context.TopologyEvent}
    */
-  public static final class DeviceId extends
+  public static final class TopologyEvent extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.DeviceId)
-      DeviceIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.TopologyEvent)
+      TopologyEventOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use DeviceId.newBuilder() to construct.
-    private DeviceId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use TopologyEvent.newBuilder() to construct.
+    private TopologyEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private DeviceId() {
+    private TopologyEvent() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new DeviceId();
+      return new TopologyEvent();
     }
 
     @java.lang.Override
@@ -12606,7 +13995,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private DeviceId(
+    private TopologyEvent(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -12625,14 +14014,27 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (deviceUuid_ != null) {
-                subBuilder = deviceUuid_.toBuilder();
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
               }
-              deviceUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(deviceUuid_);
-                deviceUuid_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
+              if (topologyId_ != null) {
+                subBuilder = topologyId_.toBuilder();
+              }
+              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(topologyId_);
+                topologyId_ = subBuilder.buildPartial();
               }
 
               break;
@@ -12658,41 +14060,67 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_DeviceId_descriptor;
+      return context.ContextOuterClass.internal_static_context_TopologyEvent_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_DeviceId_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_TopologyEvent_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.DeviceId.class, context.ContextOuterClass.DeviceId.Builder.class);
+              context.ContextOuterClass.TopologyEvent.class, context.ContextOuterClass.TopologyEvent.Builder.class);
     }
 
-    public static final int DEVICE_UUID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid deviceUuid_;
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
     /**
-     * <code>.context.Uuid device_uuid = 1;</code>
-     * @return Whether the deviceUuid field is set.
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
     @java.lang.Override
-    public boolean hasDeviceUuid() {
-      return deviceUuid_ != null;
+    public boolean hasEvent() {
+      return event_ != null;
     }
     /**
-     * <code>.context.Uuid device_uuid = 1;</code>
-     * @return The deviceUuid.
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getDeviceUuid() {
-      return deviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : deviceUuid_;
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
     }
     /**
-     * <code>.context.Uuid device_uuid = 1;</code>
+     * <code>.context.Event event = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getDeviceUuidOrBuilder() {
-      return getDeviceUuid();
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
+    }
+
+    public static final int TOPOLOGY_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.TopologyId topologyId_;
+    /**
+     * <code>.context.TopologyId topology_id = 2;</code>
+     * @return Whether the topologyId field is set.
+     */
+    @java.lang.Override
+    public boolean hasTopologyId() {
+      return topologyId_ != null;
+    }
+    /**
+     * <code>.context.TopologyId topology_id = 2;</code>
+     * @return The topologyId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyId getTopologyId() {
+      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+    }
+    /**
+     * <code>.context.TopologyId topology_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+      return getTopologyId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -12709,8 +14137,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (deviceUuid_ != null) {
-        output.writeMessage(1, getDeviceUuid());
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (topologyId_ != null) {
+        output.writeMessage(2, getTopologyId());
       }
       unknownFields.writeTo(output);
     }
@@ -12721,9 +14152,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (deviceUuid_ != null) {
+      if (event_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getDeviceUuid());
+          .computeMessageSize(1, getEvent());
+      }
+      if (topologyId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getTopologyId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -12735,15 +14170,20 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.DeviceId)) {
+      if (!(obj instanceof context.ContextOuterClass.TopologyEvent)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.DeviceId other = (context.ContextOuterClass.DeviceId) obj;
+      context.ContextOuterClass.TopologyEvent other = (context.ContextOuterClass.TopologyEvent) obj;
 
-      if (hasDeviceUuid() != other.hasDeviceUuid()) return false;
-      if (hasDeviceUuid()) {
-        if (!getDeviceUuid()
-            .equals(other.getDeviceUuid())) return false;
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasTopologyId() != other.hasTopologyId()) return false;
+      if (hasTopologyId()) {
+        if (!getTopologyId()
+            .equals(other.getTopologyId())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -12756,78 +14196,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasDeviceUuid()) {
-        hash = (37 * hash) + DEVICE_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceUuid().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (hasTopologyId()) {
+        hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyId().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.DeviceId parseFrom(
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(byte[] data)
+    public static context.ContextOuterClass.TopologyEvent parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.TopologyEvent parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceId parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.TopologyEvent parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceId parseDelimitedFrom(
+    public static context.ContextOuterClass.TopologyEvent parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -12840,7 +14284,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.DeviceId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.TopologyEvent prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -12856,30 +14300,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Device --------------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.DeviceId}
+     * Protobuf type {@code context.TopologyEvent}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.DeviceId)
-        context.ContextOuterClass.DeviceIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.TopologyEvent)
+        context.ContextOuterClass.TopologyEventOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_DeviceId_descriptor;
+        return context.ContextOuterClass.internal_static_context_TopologyEvent_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_DeviceId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_TopologyEvent_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.DeviceId.class, context.ContextOuterClass.DeviceId.Builder.class);
+                context.ContextOuterClass.TopologyEvent.class, context.ContextOuterClass.TopologyEvent.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.DeviceId.newBuilder()
+      // Construct using context.ContextOuterClass.TopologyEvent.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -12897,11 +14337,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (deviceUuidBuilder_ == null) {
-          deviceUuid_ = null;
+        if (eventBuilder_ == null) {
+          event_ = null;
         } else {
-          deviceUuid_ = null;
-          deviceUuidBuilder_ = null;
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
+        } else {
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
         }
         return this;
       }
@@ -12909,17 +14355,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_DeviceId_descriptor;
+        return context.ContextOuterClass.internal_static_context_TopologyEvent_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceId getDefaultInstanceForType() {
-        return context.ContextOuterClass.DeviceId.getDefaultInstance();
+      public context.ContextOuterClass.TopologyEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.TopologyEvent.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceId build() {
-        context.ContextOuterClass.DeviceId result = buildPartial();
+      public context.ContextOuterClass.TopologyEvent build() {
+        context.ContextOuterClass.TopologyEvent result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -12927,12 +14373,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceId buildPartial() {
-        context.ContextOuterClass.DeviceId result = new context.ContextOuterClass.DeviceId(this);
-        if (deviceUuidBuilder_ == null) {
-          result.deviceUuid_ = deviceUuid_;
+      public context.ContextOuterClass.TopologyEvent buildPartial() {
+        context.ContextOuterClass.TopologyEvent result = new context.ContextOuterClass.TopologyEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
         } else {
-          result.deviceUuid_ = deviceUuidBuilder_.build();
+          result.event_ = eventBuilder_.build();
+        }
+        if (topologyIdBuilder_ == null) {
+          result.topologyId_ = topologyId_;
+        } else {
+          result.topologyId_ = topologyIdBuilder_.build();
         }
         onBuilt();
         return result;
@@ -12972,18 +14423,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.DeviceId) {
-          return mergeFrom((context.ContextOuterClass.DeviceId)other);
+        if (other instanceof context.ContextOuterClass.TopologyEvent) {
+          return mergeFrom((context.ContextOuterClass.TopologyEvent)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.DeviceId other) {
-        if (other == context.ContextOuterClass.DeviceId.getDefaultInstance()) return this;
-        if (other.hasDeviceUuid()) {
-          mergeDeviceUuid(other.getDeviceUuid());
+      public Builder mergeFrom(context.ContextOuterClass.TopologyEvent other) {
+        if (other == context.ContextOuterClass.TopologyEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (other.hasTopologyId()) {
+          mergeTopologyId(other.getTopologyId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -13000,11 +14454,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.DeviceId parsedMessage = null;
+        context.ContextOuterClass.TopologyEvent parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.DeviceId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.TopologyEvent) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -13014,123 +14468,242 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private context.ContextOuterClass.Uuid deviceUuid_;
+      private context.ContextOuterClass.Event event_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> deviceUuidBuilder_;
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
-       * @return Whether the deviceUuid field is set.
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
        */
-      public boolean hasDeviceUuid() {
-        return deviceUuidBuilder_ != null || deviceUuid_ != null;
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
       }
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
-       * @return The deviceUuid.
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
        */
-      public context.ContextOuterClass.Uuid getDeviceUuid() {
-        if (deviceUuidBuilder_ == null) {
-          return deviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : deviceUuid_;
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         } else {
-          return deviceUuidBuilder_.getMessage();
+          return eventBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setDeviceUuid(context.ContextOuterClass.Uuid value) {
-        if (deviceUuidBuilder_ == null) {
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          deviceUuid_ = value;
+          event_ = value;
           onChanged();
         } else {
-          deviceUuidBuilder_.setMessage(value);
+          eventBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setDeviceUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (deviceUuidBuilder_ == null) {
-          deviceUuid_ = builderForValue.build();
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
           onChanged();
         } else {
-          deviceUuidBuilder_.setMessage(builderForValue.build());
+          eventBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder mergeDeviceUuid(context.ContextOuterClass.Uuid value) {
-        if (deviceUuidBuilder_ == null) {
-          if (deviceUuid_ != null) {
-            deviceUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(deviceUuid_).mergeFrom(value).buildPartial();
+      public Builder mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
           } else {
-            deviceUuid_ = value;
+            event_ = value;
           }
           onChanged();
         } else {
-          deviceUuidBuilder_.mergeFrom(value);
+          eventBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder clearDeviceUuid() {
-        if (deviceUuidBuilder_ == null) {
-          deviceUuid_ = null;
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
           onChanged();
         } else {
-          deviceUuid_ = null;
-          deviceUuidBuilder_ = null;
+          event_ = null;
+          eventBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getDeviceUuidBuilder() {
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
         
         onChanged();
-        return getDeviceUuidFieldBuilder().getBuilder();
+        return getEventFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getDeviceUuidOrBuilder() {
-        if (deviceUuidBuilder_ != null) {
-          return deviceUuidBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
         } else {
-          return deviceUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : deviceUuid_;
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
       }
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getDeviceUuidFieldBuilder() {
-        if (deviceUuidBuilder_ == null) {
-          deviceUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getDeviceUuid(),
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
+          getEventFieldBuilder() {
+        if (eventBuilder_ == null) {
+          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
+                  getEvent(),
                   getParentForChildren(),
                   isClean());
-          deviceUuid_ = null;
+          event_ = null;
         }
-        return deviceUuidBuilder_;
+        return eventBuilder_;
+      }
+
+      private context.ContextOuterClass.TopologyId topologyId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdBuilder_;
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       * @return Whether the topologyId field is set.
+       */
+      public boolean hasTopologyId() {
+        return topologyIdBuilder_ != null || topologyId_ != null;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       * @return The topologyId.
+       */
+      public context.ContextOuterClass.TopologyId getTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+        } else {
+          return topologyIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       */
+      public Builder setTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          topologyId_ = value;
+          onChanged();
+        } else {
+          topologyIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       */
+      public Builder setTopologyId(
+          context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = builderForValue.build();
+          onChanged();
+        } else {
+          topologyIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       */
+      public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (topologyId_ != null) {
+            topologyId_ =
+              context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
+          } else {
+            topologyId_ = value;
+          }
+          onChanged();
+        } else {
+          topologyIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       */
+      public Builder clearTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
+          onChanged();
+        } else {
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+        
+        onChanged();
+        return getTopologyIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       */
+      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+        if (topologyIdBuilder_ != null) {
+          return topologyIdBuilder_.getMessageOrBuilder();
+        } else {
+          return topologyId_ == null ?
+              context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+        }
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
+          getTopologyIdFieldBuilder() {
+        if (topologyIdBuilder_ == null) {
+          topologyIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
+                  getTopologyId(),
+                  getParentForChildren(),
+                  isClean());
+          topologyId_ = null;
+        }
+        return topologyIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -13145,180 +14718,89 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.DeviceId)
+      // @@protoc_insertion_point(builder_scope:context.TopologyEvent)
     }
 
-    // @@protoc_insertion_point(class_scope:context.DeviceId)
-    private static final context.ContextOuterClass.DeviceId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.TopologyEvent)
+    private static final context.ContextOuterClass.TopologyEvent DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyEvent();
     }
 
-    public static context.ContextOuterClass.DeviceId getDefaultInstance() {
+    public static context.ContextOuterClass.TopologyEvent getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<DeviceId>
-        PARSER = new com.google.protobuf.AbstractParser<DeviceId>() {
+    private static final com.google.protobuf.Parser<TopologyEvent>
+        PARSER = new com.google.protobuf.AbstractParser<TopologyEvent>() {
       @java.lang.Override
-      public DeviceId parsePartialFrom(
+      public TopologyEvent parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new DeviceId(input, extensionRegistry);
+        return new TopologyEvent(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<DeviceId> parser() {
+    public static com.google.protobuf.Parser<TopologyEvent> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<DeviceId> getParserForType() {
+    public com.google.protobuf.Parser<TopologyEvent> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.DeviceId getDefaultInstanceForType() {
+    public context.ContextOuterClass.TopologyEvent getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface DeviceOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Device)
+  public interface DeviceIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.DeviceId)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.DeviceId device_id = 1;</code>
-     * @return Whether the deviceId field is set.
-     */
-    boolean hasDeviceId();
-    /**
-     * <code>.context.DeviceId device_id = 1;</code>
-     * @return The deviceId.
-     */
-    context.ContextOuterClass.DeviceId getDeviceId();
-    /**
-     * <code>.context.DeviceId device_id = 1;</code>
-     */
-    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
-
-    /**
-     * <code>string device_type = 2;</code>
-     * @return The deviceType.
-     */
-    java.lang.String getDeviceType();
-    /**
-     * <code>string device_type = 2;</code>
-     * @return The bytes for deviceType.
-     */
-    com.google.protobuf.ByteString
-        getDeviceTypeBytes();
-
-    /**
-     * <code>.context.DeviceConfig device_config = 3;</code>
-     * @return Whether the deviceConfig field is set.
-     */
-    boolean hasDeviceConfig();
-    /**
-     * <code>.context.DeviceConfig device_config = 3;</code>
-     * @return The deviceConfig.
-     */
-    context.ContextOuterClass.DeviceConfig getDeviceConfig();
-    /**
-     * <code>.context.DeviceConfig device_config = 3;</code>
-     */
-    context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder();
-
-    /**
-     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-     * @return The enum numeric value on the wire for deviceOperationalStatus.
-     */
-    int getDeviceOperationalStatusValue();
-    /**
-     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-     * @return The deviceOperationalStatus.
-     */
-    context.ContextOuterClass.DeviceOperationalStatusEnum getDeviceOperationalStatus();
-
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @return A list containing the deviceDrivers.
-     */
-    java.util.List<context.ContextOuterClass.DeviceDriverEnum> getDeviceDriversList();
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @return The count of deviceDrivers.
-     */
-    int getDeviceDriversCount();
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @param index The index of the element to return.
-     * @return The deviceDrivers at the given index.
-     */
-    context.ContextOuterClass.DeviceDriverEnum getDeviceDrivers(int index);
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @return A list containing the enum numeric values on the wire for deviceDrivers.
-     */
-    java.util.List<java.lang.Integer>
-    getDeviceDriversValueList();
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @param index The index of the value to return.
-     * @return The enum numeric value on the wire of deviceDrivers at the given index.
-     */
-    int getDeviceDriversValue(int index);
-
-    /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-     */
-    java.util.List<context.ContextOuterClass.EndPoint> 
-        getDeviceEndpointsList();
-    /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-     */
-    context.ContextOuterClass.EndPoint getDeviceEndpoints(int index);
-    /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     * <code>.context.Uuid device_uuid = 1;</code>
+     * @return Whether the deviceUuid field is set.
      */
-    int getDeviceEndpointsCount();
+    boolean hasDeviceUuid();
     /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     * <code>.context.Uuid device_uuid = 1;</code>
+     * @return The deviceUuid.
      */
-    java.util.List<? extends context.ContextOuterClass.EndPointOrBuilder> 
-        getDeviceEndpointsOrBuilderList();
+    context.ContextOuterClass.Uuid getDeviceUuid();
     /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     * <code>.context.Uuid device_uuid = 1;</code>
      */
-    context.ContextOuterClass.EndPointOrBuilder getDeviceEndpointsOrBuilder(
-        int index);
+    context.ContextOuterClass.UuidOrBuilder getDeviceUuidOrBuilder();
   }
   /**
-   * Protobuf type {@code context.Device}
+   * <pre>
+   * ----- Device --------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.DeviceId}
    */
-  public static final class Device extends
+  public static final class DeviceId extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Device)
-      DeviceOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.DeviceId)
+      DeviceIdOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Device.newBuilder() to construct.
-    private Device(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use DeviceId.newBuilder() to construct.
+    private DeviceId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Device() {
-      deviceType_ = "";
-      deviceOperationalStatus_ = 0;
-      deviceDrivers_ = java.util.Collections.emptyList();
-      deviceEndpoints_ = java.util.Collections.emptyList();
+    private DeviceId() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Device();
+      return new DeviceId();
     }
 
     @java.lang.Override
@@ -13326,7 +14808,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Device(
+    private DeviceId(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -13334,7 +14816,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -13346,79 +14827,22 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
-              if (deviceId_ != null) {
-                subBuilder = deviceId_.toBuilder();
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (deviceUuid_ != null) {
+                subBuilder = deviceUuid_.toBuilder();
               }
-              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
+              deviceUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(deviceId_);
-                deviceId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(deviceUuid_);
+                deviceUuid_ = subBuilder.buildPartial();
               }
 
               break;
             }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              deviceType_ = s;
-              break;
-            }
-            case 26: {
-              context.ContextOuterClass.DeviceConfig.Builder subBuilder = null;
-              if (deviceConfig_ != null) {
-                subBuilder = deviceConfig_.toBuilder();
-              }
-              deviceConfig_ = input.readMessage(context.ContextOuterClass.DeviceConfig.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(deviceConfig_);
-                deviceConfig_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 32: {
-              int rawValue = input.readEnum();
-
-              deviceOperationalStatus_ = rawValue;
-              break;
-            }
-            case 40: {
-              int rawValue = input.readEnum();
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                deviceDrivers_ = new java.util.ArrayList<java.lang.Integer>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              deviceDrivers_.add(rawValue);
-              break;
-            }
-            case 42: {
-              int length = input.readRawVarint32();
-              int oldLimit = input.pushLimit(length);
-              while(input.getBytesUntilLimit() > 0) {
-                int rawValue = input.readEnum();
-                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                  deviceDrivers_ = new java.util.ArrayList<java.lang.Integer>();
-                  mutable_bitField0_ |= 0x00000001;
-                }
-                deviceDrivers_.add(rawValue);
-              }
-              input.popLimit(oldLimit);
-              break;
-            }
-            case 50: {
-              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                deviceEndpoints_ = new java.util.ArrayList<context.ContextOuterClass.EndPoint>();
-                mutable_bitField0_ |= 0x00000002;
-              }
-              deviceEndpoints_.add(
-                  input.readMessage(context.ContextOuterClass.EndPoint.parser(), extensionRegistry));
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
               }
               break;
             }
@@ -13430,234 +14854,47 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          deviceDrivers_ = java.util.Collections.unmodifiableList(deviceDrivers_);
-        }
-        if (((mutable_bitField0_ & 0x00000002) != 0)) {
-          deviceEndpoints_ = java.util.Collections.unmodifiableList(deviceEndpoints_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Device_descriptor;
+      return context.ContextOuterClass.internal_static_context_DeviceId_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Device_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_DeviceId_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Device.class, context.ContextOuterClass.Device.Builder.class);
-    }
-
-    public static final int DEVICE_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.DeviceId deviceId_;
-    /**
-     * <code>.context.DeviceId device_id = 1;</code>
-     * @return Whether the deviceId field is set.
-     */
-    @java.lang.Override
-    public boolean hasDeviceId() {
-      return deviceId_ != null;
-    }
-    /**
-     * <code>.context.DeviceId device_id = 1;</code>
-     * @return The deviceId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceId getDeviceId() {
-      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-    }
-    /**
-     * <code>.context.DeviceId device_id = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-      return getDeviceId();
-    }
-
-    public static final int DEVICE_TYPE_FIELD_NUMBER = 2;
-    private volatile java.lang.Object deviceType_;
-    /**
-     * <code>string device_type = 2;</code>
-     * @return The deviceType.
-     */
-    @java.lang.Override
-    public java.lang.String getDeviceType() {
-      java.lang.Object ref = deviceType_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        deviceType_ = s;
-        return s;
-      }
-    }
-    /**
-     * <code>string device_type = 2;</code>
-     * @return The bytes for deviceType.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getDeviceTypeBytes() {
-      java.lang.Object ref = deviceType_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        deviceType_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-
-    public static final int DEVICE_CONFIG_FIELD_NUMBER = 3;
-    private context.ContextOuterClass.DeviceConfig deviceConfig_;
-    /**
-     * <code>.context.DeviceConfig device_config = 3;</code>
-     * @return Whether the deviceConfig field is set.
-     */
-    @java.lang.Override
-    public boolean hasDeviceConfig() {
-      return deviceConfig_ != null;
-    }
-    /**
-     * <code>.context.DeviceConfig device_config = 3;</code>
-     * @return The deviceConfig.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceConfig getDeviceConfig() {
-      return deviceConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
-    }
-    /**
-     * <code>.context.DeviceConfig device_config = 3;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder() {
-      return getDeviceConfig();
-    }
-
-    public static final int DEVICE_OPERATIONAL_STATUS_FIELD_NUMBER = 4;
-    private int deviceOperationalStatus_;
-    /**
-     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-     * @return The enum numeric value on the wire for deviceOperationalStatus.
-     */
-    @java.lang.Override public int getDeviceOperationalStatusValue() {
-      return deviceOperationalStatus_;
-    }
-    /**
-     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-     * @return The deviceOperationalStatus.
-     */
-    @java.lang.Override public context.ContextOuterClass.DeviceOperationalStatusEnum getDeviceOperationalStatus() {
-      @SuppressWarnings("deprecation")
-      context.ContextOuterClass.DeviceOperationalStatusEnum result = context.ContextOuterClass.DeviceOperationalStatusEnum.valueOf(deviceOperationalStatus_);
-      return result == null ? context.ContextOuterClass.DeviceOperationalStatusEnum.UNRECOGNIZED : result;
-    }
-
-    public static final int DEVICE_DRIVERS_FIELD_NUMBER = 5;
-    private java.util.List<java.lang.Integer> deviceDrivers_;
-    private static final com.google.protobuf.Internal.ListAdapter.Converter<
-        java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum> deviceDrivers_converter_ =
-            new com.google.protobuf.Internal.ListAdapter.Converter<
-                java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum>() {
-              public context.ContextOuterClass.DeviceDriverEnum convert(java.lang.Integer from) {
-                @SuppressWarnings("deprecation")
-                context.ContextOuterClass.DeviceDriverEnum result = context.ContextOuterClass.DeviceDriverEnum.valueOf(from);
-                return result == null ? context.ContextOuterClass.DeviceDriverEnum.UNRECOGNIZED : result;
-              }
-            };
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @return A list containing the deviceDrivers.
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.DeviceDriverEnum> getDeviceDriversList() {
-      return new com.google.protobuf.Internal.ListAdapter<
-          java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum>(deviceDrivers_, deviceDrivers_converter_);
-    }
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @return The count of deviceDrivers.
-     */
-    @java.lang.Override
-    public int getDeviceDriversCount() {
-      return deviceDrivers_.size();
-    }
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @param index The index of the element to return.
-     * @return The deviceDrivers at the given index.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceDriverEnum getDeviceDrivers(int index) {
-      return deviceDrivers_converter_.convert(deviceDrivers_.get(index));
-    }
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @return A list containing the enum numeric values on the wire for deviceDrivers.
-     */
-    @java.lang.Override
-    public java.util.List<java.lang.Integer>
-    getDeviceDriversValueList() {
-      return deviceDrivers_;
-    }
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @param index The index of the value to return.
-     * @return The enum numeric value on the wire of deviceDrivers at the given index.
-     */
-    @java.lang.Override
-    public int getDeviceDriversValue(int index) {
-      return deviceDrivers_.get(index);
+              context.ContextOuterClass.DeviceId.class, context.ContextOuterClass.DeviceId.Builder.class);
     }
-    private int deviceDriversMemoizedSerializedSize;
 
-    public static final int DEVICE_ENDPOINTS_FIELD_NUMBER = 6;
-    private java.util.List<context.ContextOuterClass.EndPoint> deviceEndpoints_;
-    /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.EndPoint> getDeviceEndpointsList() {
-      return deviceEndpoints_;
-    }
-    /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.EndPointOrBuilder> 
-        getDeviceEndpointsOrBuilderList() {
-      return deviceEndpoints_;
-    }
+    public static final int DEVICE_UUID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid deviceUuid_;
     /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     * <code>.context.Uuid device_uuid = 1;</code>
+     * @return Whether the deviceUuid field is set.
      */
     @java.lang.Override
-    public int getDeviceEndpointsCount() {
-      return deviceEndpoints_.size();
+    public boolean hasDeviceUuid() {
+      return deviceUuid_ != null;
     }
     /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     * <code>.context.Uuid device_uuid = 1;</code>
+     * @return The deviceUuid.
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPoint getDeviceEndpoints(int index) {
-      return deviceEndpoints_.get(index);
+    public context.ContextOuterClass.Uuid getDeviceUuid() {
+      return deviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : deviceUuid_;
     }
     /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     * <code>.context.Uuid device_uuid = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointOrBuilder getDeviceEndpointsOrBuilder(
-        int index) {
-      return deviceEndpoints_.get(index);
+    public context.ContextOuterClass.UuidOrBuilder getDeviceUuidOrBuilder() {
+      return getDeviceUuid();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -13674,28 +14911,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      getSerializedSize();
-      if (deviceId_ != null) {
-        output.writeMessage(1, getDeviceId());
-      }
-      if (!getDeviceTypeBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, deviceType_);
-      }
-      if (deviceConfig_ != null) {
-        output.writeMessage(3, getDeviceConfig());
-      }
-      if (deviceOperationalStatus_ != context.ContextOuterClass.DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_UNDEFINED.getNumber()) {
-        output.writeEnum(4, deviceOperationalStatus_);
-      }
-      if (getDeviceDriversList().size() > 0) {
-        output.writeUInt32NoTag(42);
-        output.writeUInt32NoTag(deviceDriversMemoizedSerializedSize);
-      }
-      for (int i = 0; i < deviceDrivers_.size(); i++) {
-        output.writeEnumNoTag(deviceDrivers_.get(i));
-      }
-      for (int i = 0; i < deviceEndpoints_.size(); i++) {
-        output.writeMessage(6, deviceEndpoints_.get(i));
+      if (deviceUuid_ != null) {
+        output.writeMessage(1, getDeviceUuid());
       }
       unknownFields.writeTo(output);
     }
@@ -13706,36 +14923,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (deviceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getDeviceId());
-      }
-      if (!getDeviceTypeBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, deviceType_);
-      }
-      if (deviceConfig_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, getDeviceConfig());
-      }
-      if (deviceOperationalStatus_ != context.ContextOuterClass.DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_UNDEFINED.getNumber()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(4, deviceOperationalStatus_);
-      }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < deviceDrivers_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeEnumSizeNoTag(deviceDrivers_.get(i));
-        }
-        size += dataSize;
-        if (!getDeviceDriversList().isEmpty()) {  size += 1;
-          size += com.google.protobuf.CodedOutputStream
-            .computeUInt32SizeNoTag(dataSize);
-        }deviceDriversMemoizedSerializedSize = dataSize;
-      }
-      for (int i = 0; i < deviceEndpoints_.size(); i++) {
+      if (deviceUuid_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, deviceEndpoints_.get(i));
+          .computeMessageSize(1, getDeviceUuid());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -13747,27 +14937,16 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Device)) {
+      if (!(obj instanceof context.ContextOuterClass.DeviceId)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Device other = (context.ContextOuterClass.Device) obj;
+      context.ContextOuterClass.DeviceId other = (context.ContextOuterClass.DeviceId) obj;
 
-      if (hasDeviceId() != other.hasDeviceId()) return false;
-      if (hasDeviceId()) {
-        if (!getDeviceId()
-            .equals(other.getDeviceId())) return false;
-      }
-      if (!getDeviceType()
-          .equals(other.getDeviceType())) return false;
-      if (hasDeviceConfig() != other.hasDeviceConfig()) return false;
-      if (hasDeviceConfig()) {
-        if (!getDeviceConfig()
-            .equals(other.getDeviceConfig())) return false;
+      if (hasDeviceUuid() != other.hasDeviceUuid()) return false;
+      if (hasDeviceUuid()) {
+        if (!getDeviceUuid()
+            .equals(other.getDeviceUuid())) return false;
       }
-      if (deviceOperationalStatus_ != other.deviceOperationalStatus_) return false;
-      if (!deviceDrivers_.equals(other.deviceDrivers_)) return false;
-      if (!getDeviceEndpointsList()
-          .equals(other.getDeviceEndpointsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -13779,94 +14958,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasDeviceId()) {
-        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceId().hashCode();
-      }
-      hash = (37 * hash) + DEVICE_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + getDeviceType().hashCode();
-      if (hasDeviceConfig()) {
-        hash = (37 * hash) + DEVICE_CONFIG_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceConfig().hashCode();
-      }
-      hash = (37 * hash) + DEVICE_OPERATIONAL_STATUS_FIELD_NUMBER;
-      hash = (53 * hash) + deviceOperationalStatus_;
-      if (getDeviceDriversCount() > 0) {
-        hash = (37 * hash) + DEVICE_DRIVERS_FIELD_NUMBER;
-        hash = (53 * hash) + deviceDrivers_.hashCode();
-      }
-      if (getDeviceEndpointsCount() > 0) {
-        hash = (37 * hash) + DEVICE_ENDPOINTS_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceEndpointsList().hashCode();
+      if (hasDeviceUuid()) {
+        hash = (37 * hash) + DEVICE_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceUuid().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Device parseFrom(
+    public static context.ContextOuterClass.DeviceId parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Device parseFrom(
+    public static context.ContextOuterClass.DeviceId parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Device parseFrom(
+    public static context.ContextOuterClass.DeviceId parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Device parseFrom(
+    public static context.ContextOuterClass.DeviceId parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Device parseFrom(byte[] data)
+    public static context.ContextOuterClass.DeviceId parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Device parseFrom(
+    public static context.ContextOuterClass.DeviceId parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Device parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.DeviceId parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Device parseFrom(
+    public static context.ContextOuterClass.DeviceId parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Device parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.DeviceId parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Device parseDelimitedFrom(
+    public static context.ContextOuterClass.DeviceId parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Device parseFrom(
+    public static context.ContextOuterClass.DeviceId parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Device parseFrom(
+    public static context.ContextOuterClass.DeviceId parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -13879,7 +15042,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Device prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.DeviceId prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -13895,26 +15058,30 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Device}
+     * <pre>
+     * ----- Device --------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.DeviceId}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Device)
-        context.ContextOuterClass.DeviceOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.DeviceId)
+        context.ContextOuterClass.DeviceIdOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Device_descriptor;
+        return context.ContextOuterClass.internal_static_context_DeviceId_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Device_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_DeviceId_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Device.class, context.ContextOuterClass.Device.Builder.class);
+                context.ContextOuterClass.DeviceId.class, context.ContextOuterClass.DeviceId.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Device.newBuilder()
+      // Construct using context.ContextOuterClass.DeviceId.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -13927,35 +15094,16 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getDeviceEndpointsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
-        } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
-        }
-        deviceType_ = "";
-
-        if (deviceConfigBuilder_ == null) {
-          deviceConfig_ = null;
-        } else {
-          deviceConfig_ = null;
-          deviceConfigBuilder_ = null;
-        }
-        deviceOperationalStatus_ = 0;
-
-        deviceDrivers_ = java.util.Collections.emptyList();
-        bitField0_ = (bitField0_ & ~0x00000001);
-        if (deviceEndpointsBuilder_ == null) {
-          deviceEndpoints_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
+        if (deviceUuidBuilder_ == null) {
+          deviceUuid_ = null;
         } else {
-          deviceEndpointsBuilder_.clear();
+          deviceUuid_ = null;
+          deviceUuidBuilder_ = null;
         }
         return this;
       }
@@ -13963,17 +15111,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Device_descriptor;
+        return context.ContextOuterClass.internal_static_context_DeviceId_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Device getDefaultInstanceForType() {
-        return context.ContextOuterClass.Device.getDefaultInstance();
+      public context.ContextOuterClass.DeviceId getDefaultInstanceForType() {
+        return context.ContextOuterClass.DeviceId.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Device build() {
-        context.ContextOuterClass.Device result = buildPartial();
+      public context.ContextOuterClass.DeviceId build() {
+        context.ContextOuterClass.DeviceId result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -13981,34 +15129,12 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Device buildPartial() {
-        context.ContextOuterClass.Device result = new context.ContextOuterClass.Device(this);
-        int from_bitField0_ = bitField0_;
-        if (deviceIdBuilder_ == null) {
-          result.deviceId_ = deviceId_;
-        } else {
-          result.deviceId_ = deviceIdBuilder_.build();
-        }
-        result.deviceType_ = deviceType_;
-        if (deviceConfigBuilder_ == null) {
-          result.deviceConfig_ = deviceConfig_;
-        } else {
-          result.deviceConfig_ = deviceConfigBuilder_.build();
-        }
-        result.deviceOperationalStatus_ = deviceOperationalStatus_;
-        if (((bitField0_ & 0x00000001) != 0)) {
-          deviceDrivers_ = java.util.Collections.unmodifiableList(deviceDrivers_);
-          bitField0_ = (bitField0_ & ~0x00000001);
-        }
-        result.deviceDrivers_ = deviceDrivers_;
-        if (deviceEndpointsBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) != 0)) {
-            deviceEndpoints_ = java.util.Collections.unmodifiableList(deviceEndpoints_);
-            bitField0_ = (bitField0_ & ~0x00000002);
-          }
-          result.deviceEndpoints_ = deviceEndpoints_;
+      public context.ContextOuterClass.DeviceId buildPartial() {
+        context.ContextOuterClass.DeviceId result = new context.ContextOuterClass.DeviceId(this);
+        if (deviceUuidBuilder_ == null) {
+          result.deviceUuid_ = deviceUuid_;
         } else {
-          result.deviceEndpoints_ = deviceEndpointsBuilder_.build();
+          result.deviceUuid_ = deviceUuidBuilder_.build();
         }
         onBuilt();
         return result;
@@ -14048,64 +15174,18 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Device) {
-          return mergeFrom((context.ContextOuterClass.Device)other);
+        if (other instanceof context.ContextOuterClass.DeviceId) {
+          return mergeFrom((context.ContextOuterClass.DeviceId)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Device other) {
-        if (other == context.ContextOuterClass.Device.getDefaultInstance()) return this;
-        if (other.hasDeviceId()) {
-          mergeDeviceId(other.getDeviceId());
-        }
-        if (!other.getDeviceType().isEmpty()) {
-          deviceType_ = other.deviceType_;
-          onChanged();
-        }
-        if (other.hasDeviceConfig()) {
-          mergeDeviceConfig(other.getDeviceConfig());
-        }
-        if (other.deviceOperationalStatus_ != 0) {
-          setDeviceOperationalStatusValue(other.getDeviceOperationalStatusValue());
-        }
-        if (!other.deviceDrivers_.isEmpty()) {
-          if (deviceDrivers_.isEmpty()) {
-            deviceDrivers_ = other.deviceDrivers_;
-            bitField0_ = (bitField0_ & ~0x00000001);
-          } else {
-            ensureDeviceDriversIsMutable();
-            deviceDrivers_.addAll(other.deviceDrivers_);
-          }
-          onChanged();
-        }
-        if (deviceEndpointsBuilder_ == null) {
-          if (!other.deviceEndpoints_.isEmpty()) {
-            if (deviceEndpoints_.isEmpty()) {
-              deviceEndpoints_ = other.deviceEndpoints_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-            } else {
-              ensureDeviceEndpointsIsMutable();
-              deviceEndpoints_.addAll(other.deviceEndpoints_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.deviceEndpoints_.isEmpty()) {
-            if (deviceEndpointsBuilder_.isEmpty()) {
-              deviceEndpointsBuilder_.dispose();
-              deviceEndpointsBuilder_ = null;
-              deviceEndpoints_ = other.deviceEndpoints_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-              deviceEndpointsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getDeviceEndpointsFieldBuilder() : null;
-            } else {
-              deviceEndpointsBuilder_.addAllMessages(other.deviceEndpoints_);
-            }
-          }
+      public Builder mergeFrom(context.ContextOuterClass.DeviceId other) {
+        if (other == context.ContextOuterClass.DeviceId.getDefaultInstance()) return this;
+        if (other.hasDeviceUuid()) {
+          mergeDeviceUuid(other.getDeviceUuid());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -14122,11 +15202,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Device parsedMessage = null;
+        context.ContextOuterClass.DeviceId parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Device) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.DeviceId) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -14135,857 +15215,397 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
 
-      private context.ContextOuterClass.DeviceId deviceId_;
+      private context.ContextOuterClass.Uuid deviceUuid_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> deviceUuidBuilder_;
       /**
-       * <code>.context.DeviceId device_id = 1;</code>
-       * @return Whether the deviceId field is set.
+       * <code>.context.Uuid device_uuid = 1;</code>
+       * @return Whether the deviceUuid field is set.
        */
-      public boolean hasDeviceId() {
-        return deviceIdBuilder_ != null || deviceId_ != null;
+      public boolean hasDeviceUuid() {
+        return deviceUuidBuilder_ != null || deviceUuid_ != null;
       }
       /**
-       * <code>.context.DeviceId device_id = 1;</code>
-       * @return The deviceId.
+       * <code>.context.Uuid device_uuid = 1;</code>
+       * @return The deviceUuid.
        */
-      public context.ContextOuterClass.DeviceId getDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+      public context.ContextOuterClass.Uuid getDeviceUuid() {
+        if (deviceUuidBuilder_ == null) {
+          return deviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : deviceUuid_;
         } else {
-          return deviceIdBuilder_.getMessage();
+          return deviceUuidBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.DeviceId device_id = 1;</code>
+       * <code>.context.Uuid device_uuid = 1;</code>
        */
-      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
+      public Builder setDeviceUuid(context.ContextOuterClass.Uuid value) {
+        if (deviceUuidBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          deviceId_ = value;
+          deviceUuid_ = value;
           onChanged();
         } else {
-          deviceIdBuilder_.setMessage(value);
+          deviceUuidBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 1;</code>
+       * <code>.context.Uuid device_uuid = 1;</code>
        */
-      public Builder setDeviceId(
-          context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = builderForValue.build();
+      public Builder setDeviceUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (deviceUuidBuilder_ == null) {
+          deviceUuid_ = builderForValue.build();
           onChanged();
         } else {
-          deviceIdBuilder_.setMessage(builderForValue.build());
+          deviceUuidBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 1;</code>
+       * <code>.context.Uuid device_uuid = 1;</code>
        */
-      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (deviceId_ != null) {
-            deviceId_ =
-              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+      public Builder mergeDeviceUuid(context.ContextOuterClass.Uuid value) {
+        if (deviceUuidBuilder_ == null) {
+          if (deviceUuid_ != null) {
+            deviceUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(deviceUuid_).mergeFrom(value).buildPartial();
           } else {
-            deviceId_ = value;
+            deviceUuid_ = value;
           }
           onChanged();
         } else {
-          deviceIdBuilder_.mergeFrom(value);
+          deviceUuidBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 1;</code>
+       * <code>.context.Uuid device_uuid = 1;</code>
        */
-      public Builder clearDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
+      public Builder clearDeviceUuid() {
+        if (deviceUuidBuilder_ == null) {
+          deviceUuid_ = null;
           onChanged();
         } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
+          deviceUuid_ = null;
+          deviceUuidBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 1;</code>
+       * <code>.context.Uuid device_uuid = 1;</code>
        */
-      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+      public context.ContextOuterClass.Uuid.Builder getDeviceUuidBuilder() {
         
         onChanged();
-        return getDeviceIdFieldBuilder().getBuilder();
+        return getDeviceUuidFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.DeviceId device_id = 1;</code>
+       * <code>.context.Uuid device_uuid = 1;</code>
        */
-      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-        if (deviceIdBuilder_ != null) {
-          return deviceIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.UuidOrBuilder getDeviceUuidOrBuilder() {
+        if (deviceUuidBuilder_ != null) {
+          return deviceUuidBuilder_.getMessageOrBuilder();
         } else {
-          return deviceId_ == null ?
-              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+          return deviceUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : deviceUuid_;
         }
       }
       /**
-       * <code>.context.DeviceId device_id = 1;</code>
+       * <code>.context.Uuid device_uuid = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
-          getDeviceIdFieldBuilder() {
-        if (deviceIdBuilder_ == null) {
-          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
-                  getDeviceId(),
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getDeviceUuidFieldBuilder() {
+        if (deviceUuidBuilder_ == null) {
+          deviceUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getDeviceUuid(),
                   getParentForChildren(),
                   isClean());
-          deviceId_ = null;
-        }
-        return deviceIdBuilder_;
-      }
-
-      private java.lang.Object deviceType_ = "";
-      /**
-       * <code>string device_type = 2;</code>
-       * @return The deviceType.
-       */
-      public java.lang.String getDeviceType() {
-        java.lang.Object ref = deviceType_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          deviceType_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string device_type = 2;</code>
-       * @return The bytes for deviceType.
-       */
-      public com.google.protobuf.ByteString
-          getDeviceTypeBytes() {
-        java.lang.Object ref = deviceType_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          deviceType_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
+          deviceUuid_ = null;
         }
+        return deviceUuidBuilder_;
       }
-      /**
-       * <code>string device_type = 2;</code>
-       * @param value The deviceType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setDeviceType(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        deviceType_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string device_type = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearDeviceType() {
-        
-        deviceType_ = getDefaultInstance().getDeviceType();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string device_type = 2;</code>
-       * @param value The bytes for deviceType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setDeviceTypeBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        deviceType_ = value;
-        onChanged();
-        return this;
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
       }
 
-      private context.ContextOuterClass.DeviceConfig deviceConfig_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder> deviceConfigBuilder_;
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       * @return Whether the deviceConfig field is set.
-       */
-      public boolean hasDeviceConfig() {
-        return deviceConfigBuilder_ != null || deviceConfig_ != null;
-      }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       * @return The deviceConfig.
-       */
-      public context.ContextOuterClass.DeviceConfig getDeviceConfig() {
-        if (deviceConfigBuilder_ == null) {
-          return deviceConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
-        } else {
-          return deviceConfigBuilder_.getMessage();
-        }
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
       }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       */
-      public Builder setDeviceConfig(context.ContextOuterClass.DeviceConfig value) {
-        if (deviceConfigBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          deviceConfig_ = value;
-          onChanged();
-        } else {
-          deviceConfigBuilder_.setMessage(value);
-        }
 
-        return this;
-      }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       */
-      public Builder setDeviceConfig(
-          context.ContextOuterClass.DeviceConfig.Builder builderForValue) {
-        if (deviceConfigBuilder_ == null) {
-          deviceConfig_ = builderForValue.build();
-          onChanged();
-        } else {
-          deviceConfigBuilder_.setMessage(builderForValue.build());
-        }
 
-        return this;
-      }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       */
-      public Builder mergeDeviceConfig(context.ContextOuterClass.DeviceConfig value) {
-        if (deviceConfigBuilder_ == null) {
-          if (deviceConfig_ != null) {
-            deviceConfig_ =
-              context.ContextOuterClass.DeviceConfig.newBuilder(deviceConfig_).mergeFrom(value).buildPartial();
-          } else {
-            deviceConfig_ = value;
-          }
-          onChanged();
-        } else {
-          deviceConfigBuilder_.mergeFrom(value);
-        }
+      // @@protoc_insertion_point(builder_scope:context.DeviceId)
+    }
 
-        return this;
-      }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       */
-      public Builder clearDeviceConfig() {
-        if (deviceConfigBuilder_ == null) {
-          deviceConfig_ = null;
-          onChanged();
-        } else {
-          deviceConfig_ = null;
-          deviceConfigBuilder_ = null;
-        }
+    // @@protoc_insertion_point(class_scope:context.DeviceId)
+    private static final context.ContextOuterClass.DeviceId DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceId();
+    }
 
-        return this;
-      }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       */
-      public context.ContextOuterClass.DeviceConfig.Builder getDeviceConfigBuilder() {
-        
-        onChanged();
-        return getDeviceConfigFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       */
-      public context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder() {
-        if (deviceConfigBuilder_ != null) {
-          return deviceConfigBuilder_.getMessageOrBuilder();
-        } else {
-          return deviceConfig_ == null ?
-              context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
-        }
-      }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder> 
-          getDeviceConfigFieldBuilder() {
-        if (deviceConfigBuilder_ == null) {
-          deviceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder>(
-                  getDeviceConfig(),
-                  getParentForChildren(),
-                  isClean());
-          deviceConfig_ = null;
-        }
-        return deviceConfigBuilder_;
-      }
+    public static context.ContextOuterClass.DeviceId getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
 
-      private int deviceOperationalStatus_ = 0;
-      /**
-       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-       * @return The enum numeric value on the wire for deviceOperationalStatus.
-       */
-      @java.lang.Override public int getDeviceOperationalStatusValue() {
-        return deviceOperationalStatus_;
-      }
-      /**
-       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-       * @param value The enum numeric value on the wire for deviceOperationalStatus to set.
-       * @return This builder for chaining.
-       */
-      public Builder setDeviceOperationalStatusValue(int value) {
-        
-        deviceOperationalStatus_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-       * @return The deviceOperationalStatus.
-       */
+    private static final com.google.protobuf.Parser<DeviceId>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceId>() {
       @java.lang.Override
-      public context.ContextOuterClass.DeviceOperationalStatusEnum getDeviceOperationalStatus() {
-        @SuppressWarnings("deprecation")
-        context.ContextOuterClass.DeviceOperationalStatusEnum result = context.ContextOuterClass.DeviceOperationalStatusEnum.valueOf(deviceOperationalStatus_);
-        return result == null ? context.ContextOuterClass.DeviceOperationalStatusEnum.UNRECOGNIZED : result;
-      }
-      /**
-       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-       * @param value The deviceOperationalStatus to set.
-       * @return This builder for chaining.
-       */
-      public Builder setDeviceOperationalStatus(context.ContextOuterClass.DeviceOperationalStatusEnum value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        
-        deviceOperationalStatus_ = value.getNumber();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearDeviceOperationalStatus() {
-        
-        deviceOperationalStatus_ = 0;
-        onChanged();
-        return this;
+      public DeviceId parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DeviceId(input, extensionRegistry);
       }
+    };
 
-      private java.util.List<java.lang.Integer> deviceDrivers_ =
-        java.util.Collections.emptyList();
-      private void ensureDeviceDriversIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          deviceDrivers_ = new java.util.ArrayList<java.lang.Integer>(deviceDrivers_);
-          bitField0_ |= 0x00000001;
-        }
-      }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @return A list containing the deviceDrivers.
-       */
-      public java.util.List<context.ContextOuterClass.DeviceDriverEnum> getDeviceDriversList() {
-        return new com.google.protobuf.Internal.ListAdapter<
-            java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum>(deviceDrivers_, deviceDrivers_converter_);
-      }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @return The count of deviceDrivers.
-       */
-      public int getDeviceDriversCount() {
-        return deviceDrivers_.size();
-      }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @param index The index of the element to return.
-       * @return The deviceDrivers at the given index.
-       */
-      public context.ContextOuterClass.DeviceDriverEnum getDeviceDrivers(int index) {
-        return deviceDrivers_converter_.convert(deviceDrivers_.get(index));
-      }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @param index The index to set the value at.
-       * @param value The deviceDrivers to set.
-       * @return This builder for chaining.
-       */
-      public Builder setDeviceDrivers(
-          int index, context.ContextOuterClass.DeviceDriverEnum value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        ensureDeviceDriversIsMutable();
-        deviceDrivers_.set(index, value.getNumber());
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @param value The deviceDrivers to add.
-       * @return This builder for chaining.
-       */
-      public Builder addDeviceDrivers(context.ContextOuterClass.DeviceDriverEnum value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        ensureDeviceDriversIsMutable();
-        deviceDrivers_.add(value.getNumber());
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @param values The deviceDrivers to add.
-       * @return This builder for chaining.
-       */
-      public Builder addAllDeviceDrivers(
-          java.lang.Iterable<? extends context.ContextOuterClass.DeviceDriverEnum> values) {
-        ensureDeviceDriversIsMutable();
-        for (context.ContextOuterClass.DeviceDriverEnum value : values) {
-          deviceDrivers_.add(value.getNumber());
-        }
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearDeviceDrivers() {
-        deviceDrivers_ = java.util.Collections.emptyList();
-        bitField0_ = (bitField0_ & ~0x00000001);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @return A list containing the enum numeric values on the wire for deviceDrivers.
-       */
-      public java.util.List<java.lang.Integer>
-      getDeviceDriversValueList() {
-        return java.util.Collections.unmodifiableList(deviceDrivers_);
-      }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @param index The index of the value to return.
-       * @return The enum numeric value on the wire of deviceDrivers at the given index.
-       */
-      public int getDeviceDriversValue(int index) {
-        return deviceDrivers_.get(index);
-      }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @param index The index of the value to return.
-       * @return The enum numeric value on the wire of deviceDrivers at the given index.
-       * @return This builder for chaining.
-       */
-      public Builder setDeviceDriversValue(
-          int index, int value) {
-        ensureDeviceDriversIsMutable();
-        deviceDrivers_.set(index, value);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @param value The enum numeric value on the wire for deviceDrivers to add.
-       * @return This builder for chaining.
-       */
-      public Builder addDeviceDriversValue(int value) {
-        ensureDeviceDriversIsMutable();
-        deviceDrivers_.add(value);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @param values The enum numeric values on the wire for deviceDrivers to add.
-       * @return This builder for chaining.
-       */
-      public Builder addAllDeviceDriversValue(
-          java.lang.Iterable<java.lang.Integer> values) {
-        ensureDeviceDriversIsMutable();
-        for (int value : values) {
-          deviceDrivers_.add(value);
-        }
-        onChanged();
-        return this;
-      }
+    public static com.google.protobuf.Parser<DeviceId> parser() {
+      return PARSER;
+    }
 
-      private java.util.List<context.ContextOuterClass.EndPoint> deviceEndpoints_ =
-        java.util.Collections.emptyList();
-      private void ensureDeviceEndpointsIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
-          deviceEndpoints_ = new java.util.ArrayList<context.ContextOuterClass.EndPoint>(deviceEndpoints_);
-          bitField0_ |= 0x00000002;
-         }
-      }
+    @java.lang.Override
+    public com.google.protobuf.Parser<DeviceId> getParserForType() {
+      return PARSER;
+    }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPoint, context.ContextOuterClass.EndPoint.Builder, context.ContextOuterClass.EndPointOrBuilder> deviceEndpointsBuilder_;
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
 
-      /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-       */
-      public java.util.List<context.ContextOuterClass.EndPoint> getDeviceEndpointsList() {
-        if (deviceEndpointsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(deviceEndpoints_);
-        } else {
-          return deviceEndpointsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-       */
-      public int getDeviceEndpointsCount() {
-        if (deviceEndpointsBuilder_ == null) {
-          return deviceEndpoints_.size();
-        } else {
-          return deviceEndpointsBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-       */
-      public context.ContextOuterClass.EndPoint getDeviceEndpoints(int index) {
-        if (deviceEndpointsBuilder_ == null) {
-          return deviceEndpoints_.get(index);
-        } else {
-          return deviceEndpointsBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-       */
-      public Builder setDeviceEndpoints(
-          int index, context.ContextOuterClass.EndPoint value) {
-        if (deviceEndpointsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureDeviceEndpointsIsMutable();
-          deviceEndpoints_.set(index, value);
-          onChanged();
-        } else {
-          deviceEndpointsBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-       */
-      public Builder setDeviceEndpoints(
-          int index, context.ContextOuterClass.EndPoint.Builder builderForValue) {
-        if (deviceEndpointsBuilder_ == null) {
-          ensureDeviceEndpointsIsMutable();
-          deviceEndpoints_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          deviceEndpointsBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-       */
-      public Builder addDeviceEndpoints(context.ContextOuterClass.EndPoint value) {
-        if (deviceEndpointsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureDeviceEndpointsIsMutable();
-          deviceEndpoints_.add(value);
-          onChanged();
-        } else {
-          deviceEndpointsBuilder_.addMessage(value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-       */
-      public Builder addDeviceEndpoints(
-          int index, context.ContextOuterClass.EndPoint value) {
-        if (deviceEndpointsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureDeviceEndpointsIsMutable();
-          deviceEndpoints_.add(index, value);
-          onChanged();
-        } else {
-          deviceEndpointsBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-       */
-      public Builder addDeviceEndpoints(
-          context.ContextOuterClass.EndPoint.Builder builderForValue) {
-        if (deviceEndpointsBuilder_ == null) {
-          ensureDeviceEndpointsIsMutable();
-          deviceEndpoints_.add(builderForValue.build());
-          onChanged();
-        } else {
-          deviceEndpointsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-       */
-      public Builder addDeviceEndpoints(
-          int index, context.ContextOuterClass.EndPoint.Builder builderForValue) {
-        if (deviceEndpointsBuilder_ == null) {
-          ensureDeviceEndpointsIsMutable();
-          deviceEndpoints_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          deviceEndpointsBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-       */
-      public Builder addAllDeviceEndpoints(
-          java.lang.Iterable<? extends context.ContextOuterClass.EndPoint> values) {
-        if (deviceEndpointsBuilder_ == null) {
-          ensureDeviceEndpointsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, deviceEndpoints_);
-          onChanged();
-        } else {
-          deviceEndpointsBuilder_.addAllMessages(values);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-       */
-      public Builder clearDeviceEndpoints() {
-        if (deviceEndpointsBuilder_ == null) {
-          deviceEndpoints_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
-          onChanged();
-        } else {
-          deviceEndpointsBuilder_.clear();
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-       */
-      public Builder removeDeviceEndpoints(int index) {
-        if (deviceEndpointsBuilder_ == null) {
-          ensureDeviceEndpointsIsMutable();
-          deviceEndpoints_.remove(index);
-          onChanged();
-        } else {
-          deviceEndpointsBuilder_.remove(index);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-       */
-      public context.ContextOuterClass.EndPoint.Builder getDeviceEndpointsBuilder(
-          int index) {
-        return getDeviceEndpointsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-       */
-      public context.ContextOuterClass.EndPointOrBuilder getDeviceEndpointsOrBuilder(
-          int index) {
-        if (deviceEndpointsBuilder_ == null) {
-          return deviceEndpoints_.get(index);  } else {
-          return deviceEndpointsBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-       */
-      public java.util.List<? extends context.ContextOuterClass.EndPointOrBuilder> 
-           getDeviceEndpointsOrBuilderList() {
-        if (deviceEndpointsBuilder_ != null) {
-          return deviceEndpointsBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(deviceEndpoints_);
-        }
-      }
-      /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-       */
-      public context.ContextOuterClass.EndPoint.Builder addDeviceEndpointsBuilder() {
-        return getDeviceEndpointsFieldBuilder().addBuilder(
-            context.ContextOuterClass.EndPoint.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-       */
-      public context.ContextOuterClass.EndPoint.Builder addDeviceEndpointsBuilder(
-          int index) {
-        return getDeviceEndpointsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.EndPoint.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-       */
-      public java.util.List<context.ContextOuterClass.EndPoint.Builder> 
-           getDeviceEndpointsBuilderList() {
-        return getDeviceEndpointsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPoint, context.ContextOuterClass.EndPoint.Builder, context.ContextOuterClass.EndPointOrBuilder> 
-          getDeviceEndpointsFieldBuilder() {
-        if (deviceEndpointsBuilder_ == null) {
-          deviceEndpointsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.EndPoint, context.ContextOuterClass.EndPoint.Builder, context.ContextOuterClass.EndPointOrBuilder>(
-                  deviceEndpoints_,
-                  ((bitField0_ & 0x00000002) != 0),
-                  getParentForChildren(),
-                  isClean());
-          deviceEndpoints_ = null;
-        }
-        return deviceEndpointsBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:context.Device)
-    }
+  }
 
-    // @@protoc_insertion_point(class_scope:context.Device)
-    private static final context.ContextOuterClass.Device DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Device();
-    }
+  public interface DeviceOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Device)
+      com.google.protobuf.MessageOrBuilder {
 
-    public static context.ContextOuterClass.Device getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
+    /**
+     * <code>.context.DeviceId device_id = 1;</code>
+     * @return Whether the deviceId field is set.
+     */
+    boolean hasDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 1;</code>
+     * @return The deviceId.
+     */
+    context.ContextOuterClass.DeviceId getDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 1;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
 
-    private static final com.google.protobuf.Parser<Device>
-        PARSER = new com.google.protobuf.AbstractParser<Device>() {
-      @java.lang.Override
-      public Device parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Device(input, extensionRegistry);
-      }
-    };
+    /**
+     * <code>string name = 2;</code>
+     * @return The name.
+     */
+    java.lang.String getName();
+    /**
+     * <code>string name = 2;</code>
+     * @return The bytes for name.
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
 
-    public static com.google.protobuf.Parser<Device> parser() {
-      return PARSER;
-    }
+    /**
+     * <code>string device_type = 3;</code>
+     * @return The deviceType.
+     */
+    java.lang.String getDeviceType();
+    /**
+     * <code>string device_type = 3;</code>
+     * @return The bytes for deviceType.
+     */
+    com.google.protobuf.ByteString
+        getDeviceTypeBytes();
 
-    @java.lang.Override
-    public com.google.protobuf.Parser<Device> getParserForType() {
-      return PARSER;
-    }
+    /**
+     * <code>.context.DeviceConfig device_config = 4;</code>
+     * @return Whether the deviceConfig field is set.
+     */
+    boolean hasDeviceConfig();
+    /**
+     * <code>.context.DeviceConfig device_config = 4;</code>
+     * @return The deviceConfig.
+     */
+    context.ContextOuterClass.DeviceConfig getDeviceConfig();
+    /**
+     * <code>.context.DeviceConfig device_config = 4;</code>
+     */
+    context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder();
 
-    @java.lang.Override
-    public context.ContextOuterClass.Device getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
+    /**
+     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 5;</code>
+     * @return The enum numeric value on the wire for deviceOperationalStatus.
+     */
+    int getDeviceOperationalStatusValue();
+    /**
+     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 5;</code>
+     * @return The deviceOperationalStatus.
+     */
+    context.ContextOuterClass.DeviceOperationalStatusEnum getDeviceOperationalStatus();
 
-  }
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 6;</code>
+     * @return A list containing the deviceDrivers.
+     */
+    java.util.List<context.ContextOuterClass.DeviceDriverEnum> getDeviceDriversList();
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 6;</code>
+     * @return The count of deviceDrivers.
+     */
+    int getDeviceDriversCount();
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 6;</code>
+     * @param index The index of the element to return.
+     * @return The deviceDrivers at the given index.
+     */
+    context.ContextOuterClass.DeviceDriverEnum getDeviceDrivers(int index);
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 6;</code>
+     * @return A list containing the enum numeric values on the wire for deviceDrivers.
+     */
+    java.util.List<java.lang.Integer>
+    getDeviceDriversValueList();
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 6;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of deviceDrivers at the given index.
+     */
+    int getDeviceDriversValue(int index);
 
-  public interface DeviceConfigOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.DeviceConfig)
-      com.google.protobuf.MessageOrBuilder {
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+     */
+    java.util.List<context.ContextOuterClass.EndPoint> 
+        getDeviceEndpointsList();
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+     */
+    context.ContextOuterClass.EndPoint getDeviceEndpoints(int index);
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+     */
+    int getDeviceEndpointsCount();
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.EndPointOrBuilder> 
+        getDeviceEndpointsOrBuilderList();
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+     */
+    context.ContextOuterClass.EndPointOrBuilder getDeviceEndpointsOrBuilder(
+        int index);
 
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <pre>
+     * Used for inventory
+     * </pre>
+     *
+     * <code>repeated .context.Component component = 8;</code>
      */
-    java.util.List<context.ContextOuterClass.ConfigRule> 
-        getConfigRulesList();
+    java.util.List<context.ContextOuterClass.Component> 
+        getComponentList();
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <pre>
+     * Used for inventory
+     * </pre>
+     *
+     * <code>repeated .context.Component component = 8;</code>
      */
-    context.ContextOuterClass.ConfigRule getConfigRules(int index);
+    context.ContextOuterClass.Component getComponent(int index);
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <pre>
+     * Used for inventory
+     * </pre>
+     *
+     * <code>repeated .context.Component component = 8;</code>
      */
-    int getConfigRulesCount();
+    int getComponentCount();
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <pre>
+     * Used for inventory
+     * </pre>
+     *
+     * <code>repeated .context.Component component = 8;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
-        getConfigRulesOrBuilderList();
+    java.util.List<? extends context.ContextOuterClass.ComponentOrBuilder> 
+        getComponentOrBuilderList();
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <pre>
+     * Used for inventory
+     * </pre>
+     *
+     * <code>repeated .context.Component component = 8;</code>
      */
-    context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+    context.ContextOuterClass.ComponentOrBuilder getComponentOrBuilder(
         int index);
+
+    /**
+     * <pre>
+     * Identifier of node controlling the actual device
+     * </pre>
+     *
+     * <code>.context.DeviceId controller_id = 9;</code>
+     * @return Whether the controllerId field is set.
+     */
+    boolean hasControllerId();
+    /**
+     * <pre>
+     * Identifier of node controlling the actual device
+     * </pre>
+     *
+     * <code>.context.DeviceId controller_id = 9;</code>
+     * @return The controllerId.
+     */
+    context.ContextOuterClass.DeviceId getControllerId();
+    /**
+     * <pre>
+     * Identifier of node controlling the actual device
+     * </pre>
+     *
+     * <code>.context.DeviceId controller_id = 9;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getControllerIdOrBuilder();
   }
   /**
-   * Protobuf type {@code context.DeviceConfig}
+   * Protobuf type {@code context.Device}
    */
-  public static final class DeviceConfig extends
+  public static final class Device extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.DeviceConfig)
-      DeviceConfigOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Device)
+      DeviceOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use DeviceConfig.newBuilder() to construct.
-    private DeviceConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Device.newBuilder() to construct.
+    private Device(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private DeviceConfig() {
-      configRules_ = java.util.Collections.emptyList();
+    private Device() {
+      name_ = "";
+      deviceType_ = "";
+      deviceOperationalStatus_ = 0;
+      deviceDrivers_ = java.util.Collections.emptyList();
+      deviceEndpoints_ = java.util.Collections.emptyList();
+      component_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new DeviceConfig();
+      return new Device();
     }
 
     @java.lang.Override
@@ -14993,7 +15613,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private DeviceConfig(
+    private Device(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -15013,12 +15633,101 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
+              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
+              if (deviceId_ != null) {
+                subBuilder = deviceId_.toBuilder();
+              }
+              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(deviceId_);
+                deviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              name_ = s;
+              break;
+            }
+            case 26: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              deviceType_ = s;
+              break;
+            }
+            case 34: {
+              context.ContextOuterClass.DeviceConfig.Builder subBuilder = null;
+              if (deviceConfig_ != null) {
+                subBuilder = deviceConfig_.toBuilder();
+              }
+              deviceConfig_ = input.readMessage(context.ContextOuterClass.DeviceConfig.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(deviceConfig_);
+                deviceConfig_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 40: {
+              int rawValue = input.readEnum();
+
+              deviceOperationalStatus_ = rawValue;
+              break;
+            }
+            case 48: {
+              int rawValue = input.readEnum();
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>();
+                deviceDrivers_ = new java.util.ArrayList<java.lang.Integer>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              configRules_.add(
-                  input.readMessage(context.ContextOuterClass.ConfigRule.parser(), extensionRegistry));
+              deviceDrivers_.add(rawValue);
+              break;
+            }
+            case 50: {
+              int length = input.readRawVarint32();
+              int oldLimit = input.pushLimit(length);
+              while(input.getBytesUntilLimit() > 0) {
+                int rawValue = input.readEnum();
+                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                  deviceDrivers_ = new java.util.ArrayList<java.lang.Integer>();
+                  mutable_bitField0_ |= 0x00000001;
+                }
+                deviceDrivers_.add(rawValue);
+              }
+              input.popLimit(oldLimit);
+              break;
+            }
+            case 58: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                deviceEndpoints_ = new java.util.ArrayList<context.ContextOuterClass.EndPoint>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              deviceEndpoints_.add(
+                  input.readMessage(context.ContextOuterClass.EndPoint.parser(), extensionRegistry));
+              break;
+            }
+            case 66: {
+              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
+                component_ = new java.util.ArrayList<context.ContextOuterClass.Component>();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              component_.add(
+                  input.readMessage(context.ContextOuterClass.Component.parser(), extensionRegistry));
+              break;
+            }
+            case 74: {
+              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
+              if (controllerId_ != null) {
+                subBuilder = controllerId_.toBuilder();
+              }
+              controllerId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(controllerId_);
+                controllerId_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -15037,7 +15746,13 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          configRules_ = java.util.Collections.unmodifiableList(configRules_);
+          deviceDrivers_ = java.util.Collections.unmodifiableList(deviceDrivers_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          deviceEndpoints_ = java.util.Collections.unmodifiableList(deviceEndpoints_);
+        }
+        if (((mutable_bitField0_ & 0x00000004) != 0)) {
+          component_ = java.util.Collections.unmodifiableList(component_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -15045,55 +15760,358 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_DeviceConfig_descriptor;
+      return context.ContextOuterClass.internal_static_context_Device_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_DeviceConfig_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Device_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.DeviceConfig.class, context.ContextOuterClass.DeviceConfig.Builder.class);
+              context.ContextOuterClass.Device.class, context.ContextOuterClass.Device.Builder.class);
     }
 
-    public static final int CONFIG_RULES_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.ConfigRule> configRules_;
+    public static final int DEVICE_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.DeviceId deviceId_;
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.DeviceId device_id = 1;</code>
+     * @return Whether the deviceId field is set.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
-      return configRules_;
+    public boolean hasDeviceId() {
+      return deviceId_ != null;
     }
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.DeviceId device_id = 1;</code>
+     * @return The deviceId.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
-        getConfigRulesOrBuilderList() {
-      return configRules_;
+    public context.ContextOuterClass.DeviceId getDeviceId() {
+      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
     }
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.DeviceId device_id = 1;</code>
      */
     @java.lang.Override
-    public int getConfigRulesCount() {
-      return configRules_.size();
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+      return getDeviceId();
     }
+
+    public static final int NAME_FIELD_NUMBER = 2;
+    private volatile java.lang.Object name_;
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>string name = 2;</code>
+     * @return The name.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
-      return configRules_.get(index);
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        name_ = s;
+        return s;
+      }
     }
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>string name = 2;</code>
+     * @return The bytes for name.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+    public com.google.protobuf.ByteString
+        getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int DEVICE_TYPE_FIELD_NUMBER = 3;
+    private volatile java.lang.Object deviceType_;
+    /**
+     * <code>string device_type = 3;</code>
+     * @return The deviceType.
+     */
+    @java.lang.Override
+    public java.lang.String getDeviceType() {
+      java.lang.Object ref = deviceType_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        deviceType_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string device_type = 3;</code>
+     * @return The bytes for deviceType.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getDeviceTypeBytes() {
+      java.lang.Object ref = deviceType_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        deviceType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int DEVICE_CONFIG_FIELD_NUMBER = 4;
+    private context.ContextOuterClass.DeviceConfig deviceConfig_;
+    /**
+     * <code>.context.DeviceConfig device_config = 4;</code>
+     * @return Whether the deviceConfig field is set.
+     */
+    @java.lang.Override
+    public boolean hasDeviceConfig() {
+      return deviceConfig_ != null;
+    }
+    /**
+     * <code>.context.DeviceConfig device_config = 4;</code>
+     * @return The deviceConfig.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceConfig getDeviceConfig() {
+      return deviceConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
+    }
+    /**
+     * <code>.context.DeviceConfig device_config = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder() {
+      return getDeviceConfig();
+    }
+
+    public static final int DEVICE_OPERATIONAL_STATUS_FIELD_NUMBER = 5;
+    private int deviceOperationalStatus_;
+    /**
+     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 5;</code>
+     * @return The enum numeric value on the wire for deviceOperationalStatus.
+     */
+    @java.lang.Override public int getDeviceOperationalStatusValue() {
+      return deviceOperationalStatus_;
+    }
+    /**
+     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 5;</code>
+     * @return The deviceOperationalStatus.
+     */
+    @java.lang.Override public context.ContextOuterClass.DeviceOperationalStatusEnum getDeviceOperationalStatus() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.DeviceOperationalStatusEnum result = context.ContextOuterClass.DeviceOperationalStatusEnum.valueOf(deviceOperationalStatus_);
+      return result == null ? context.ContextOuterClass.DeviceOperationalStatusEnum.UNRECOGNIZED : result;
+    }
+
+    public static final int DEVICE_DRIVERS_FIELD_NUMBER = 6;
+    private java.util.List<java.lang.Integer> deviceDrivers_;
+    private static final com.google.protobuf.Internal.ListAdapter.Converter<
+        java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum> deviceDrivers_converter_ =
+            new com.google.protobuf.Internal.ListAdapter.Converter<
+                java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum>() {
+              public context.ContextOuterClass.DeviceDriverEnum convert(java.lang.Integer from) {
+                @SuppressWarnings("deprecation")
+                context.ContextOuterClass.DeviceDriverEnum result = context.ContextOuterClass.DeviceDriverEnum.valueOf(from);
+                return result == null ? context.ContextOuterClass.DeviceDriverEnum.UNRECOGNIZED : result;
+              }
+            };
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 6;</code>
+     * @return A list containing the deviceDrivers.
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.DeviceDriverEnum> getDeviceDriversList() {
+      return new com.google.protobuf.Internal.ListAdapter<
+          java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum>(deviceDrivers_, deviceDrivers_converter_);
+    }
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 6;</code>
+     * @return The count of deviceDrivers.
+     */
+    @java.lang.Override
+    public int getDeviceDriversCount() {
+      return deviceDrivers_.size();
+    }
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 6;</code>
+     * @param index The index of the element to return.
+     * @return The deviceDrivers at the given index.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceDriverEnum getDeviceDrivers(int index) {
+      return deviceDrivers_converter_.convert(deviceDrivers_.get(index));
+    }
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 6;</code>
+     * @return A list containing the enum numeric values on the wire for deviceDrivers.
+     */
+    @java.lang.Override
+    public java.util.List<java.lang.Integer>
+    getDeviceDriversValueList() {
+      return deviceDrivers_;
+    }
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 6;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of deviceDrivers at the given index.
+     */
+    @java.lang.Override
+    public int getDeviceDriversValue(int index) {
+      return deviceDrivers_.get(index);
+    }
+    private int deviceDriversMemoizedSerializedSize;
+
+    public static final int DEVICE_ENDPOINTS_FIELD_NUMBER = 7;
+    private java.util.List<context.ContextOuterClass.EndPoint> deviceEndpoints_;
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.EndPoint> getDeviceEndpointsList() {
+      return deviceEndpoints_;
+    }
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.EndPointOrBuilder> 
+        getDeviceEndpointsOrBuilderList() {
+      return deviceEndpoints_;
+    }
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+     */
+    @java.lang.Override
+    public int getDeviceEndpointsCount() {
+      return deviceEndpoints_.size();
+    }
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPoint getDeviceEndpoints(int index) {
+      return deviceEndpoints_.get(index);
+    }
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointOrBuilder getDeviceEndpointsOrBuilder(
         int index) {
-      return configRules_.get(index);
+      return deviceEndpoints_.get(index);
+    }
+
+    public static final int COMPONENT_FIELD_NUMBER = 8;
+    private java.util.List<context.ContextOuterClass.Component> component_;
+    /**
+     * <pre>
+     * Used for inventory
+     * </pre>
+     *
+     * <code>repeated .context.Component component = 8;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.Component> getComponentList() {
+      return component_;
+    }
+    /**
+     * <pre>
+     * Used for inventory
+     * </pre>
+     *
+     * <code>repeated .context.Component component = 8;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ComponentOrBuilder> 
+        getComponentOrBuilderList() {
+      return component_;
+    }
+    /**
+     * <pre>
+     * Used for inventory
+     * </pre>
+     *
+     * <code>repeated .context.Component component = 8;</code>
+     */
+    @java.lang.Override
+    public int getComponentCount() {
+      return component_.size();
+    }
+    /**
+     * <pre>
+     * Used for inventory
+     * </pre>
+     *
+     * <code>repeated .context.Component component = 8;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Component getComponent(int index) {
+      return component_.get(index);
+    }
+    /**
+     * <pre>
+     * Used for inventory
+     * </pre>
+     *
+     * <code>repeated .context.Component component = 8;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ComponentOrBuilder getComponentOrBuilder(
+        int index) {
+      return component_.get(index);
+    }
+
+    public static final int CONTROLLER_ID_FIELD_NUMBER = 9;
+    private context.ContextOuterClass.DeviceId controllerId_;
+    /**
+     * <pre>
+     * Identifier of node controlling the actual device
+     * </pre>
+     *
+     * <code>.context.DeviceId controller_id = 9;</code>
+     * @return Whether the controllerId field is set.
+     */
+    @java.lang.Override
+    public boolean hasControllerId() {
+      return controllerId_ != null;
+    }
+    /**
+     * <pre>
+     * Identifier of node controlling the actual device
+     * </pre>
+     *
+     * <code>.context.DeviceId controller_id = 9;</code>
+     * @return The controllerId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getControllerId() {
+      return controllerId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : controllerId_;
+    }
+    /**
+     * <pre>
+     * Identifier of node controlling the actual device
+     * </pre>
+     *
+     * <code>.context.DeviceId controller_id = 9;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getControllerIdOrBuilder() {
+      return getControllerId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -15110,8 +16128,37 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < configRules_.size(); i++) {
-        output.writeMessage(1, configRules_.get(i));
+      getSerializedSize();
+      if (deviceId_ != null) {
+        output.writeMessage(1, getDeviceId());
+      }
+      if (!getNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
+      }
+      if (!getDeviceTypeBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, deviceType_);
+      }
+      if (deviceConfig_ != null) {
+        output.writeMessage(4, getDeviceConfig());
+      }
+      if (deviceOperationalStatus_ != context.ContextOuterClass.DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_UNDEFINED.getNumber()) {
+        output.writeEnum(5, deviceOperationalStatus_);
+      }
+      if (getDeviceDriversList().size() > 0) {
+        output.writeUInt32NoTag(50);
+        output.writeUInt32NoTag(deviceDriversMemoizedSerializedSize);
+      }
+      for (int i = 0; i < deviceDrivers_.size(); i++) {
+        output.writeEnumNoTag(deviceDrivers_.get(i));
+      }
+      for (int i = 0; i < deviceEndpoints_.size(); i++) {
+        output.writeMessage(7, deviceEndpoints_.get(i));
+      }
+      for (int i = 0; i < component_.size(); i++) {
+        output.writeMessage(8, component_.get(i));
+      }
+      if (controllerId_ != null) {
+        output.writeMessage(9, getControllerId());
       }
       unknownFields.writeTo(output);
     }
@@ -15122,9 +16169,47 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < configRules_.size(); i++) {
+      if (deviceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, configRules_.get(i));
+          .computeMessageSize(1, getDeviceId());
+      }
+      if (!getNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
+      }
+      if (!getDeviceTypeBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, deviceType_);
+      }
+      if (deviceConfig_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, getDeviceConfig());
+      }
+      if (deviceOperationalStatus_ != context.ContextOuterClass.DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_UNDEFINED.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(5, deviceOperationalStatus_);
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < deviceDrivers_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeEnumSizeNoTag(deviceDrivers_.get(i));
+        }
+        size += dataSize;
+        if (!getDeviceDriversList().isEmpty()) {  size += 1;
+          size += com.google.protobuf.CodedOutputStream
+            .computeUInt32SizeNoTag(dataSize);
+        }deviceDriversMemoizedSerializedSize = dataSize;
+      }
+      for (int i = 0; i < deviceEndpoints_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(7, deviceEndpoints_.get(i));
+      }
+      for (int i = 0; i < component_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(8, component_.get(i));
+      }
+      if (controllerId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(9, getControllerId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -15136,13 +16221,36 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.DeviceConfig)) {
+      if (!(obj instanceof context.ContextOuterClass.Device)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.DeviceConfig other = (context.ContextOuterClass.DeviceConfig) obj;
+      context.ContextOuterClass.Device other = (context.ContextOuterClass.Device) obj;
 
-      if (!getConfigRulesList()
-          .equals(other.getConfigRulesList())) return false;
+      if (hasDeviceId() != other.hasDeviceId()) return false;
+      if (hasDeviceId()) {
+        if (!getDeviceId()
+            .equals(other.getDeviceId())) return false;
+      }
+      if (!getName()
+          .equals(other.getName())) return false;
+      if (!getDeviceType()
+          .equals(other.getDeviceType())) return false;
+      if (hasDeviceConfig() != other.hasDeviceConfig()) return false;
+      if (hasDeviceConfig()) {
+        if (!getDeviceConfig()
+            .equals(other.getDeviceConfig())) return false;
+      }
+      if (deviceOperationalStatus_ != other.deviceOperationalStatus_) return false;
+      if (!deviceDrivers_.equals(other.deviceDrivers_)) return false;
+      if (!getDeviceEndpointsList()
+          .equals(other.getDeviceEndpointsList())) return false;
+      if (!getComponentList()
+          .equals(other.getComponentList())) return false;
+      if (hasControllerId() != other.hasControllerId()) return false;
+      if (hasControllerId()) {
+        if (!getControllerId()
+            .equals(other.getControllerId())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -15154,78 +16262,104 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getConfigRulesCount() > 0) {
-        hash = (37 * hash) + CONFIG_RULES_FIELD_NUMBER;
-        hash = (53 * hash) + getConfigRulesList().hashCode();
+      if (hasDeviceId()) {
+        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceId().hashCode();
+      }
+      hash = (37 * hash) + NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getName().hashCode();
+      hash = (37 * hash) + DEVICE_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getDeviceType().hashCode();
+      if (hasDeviceConfig()) {
+        hash = (37 * hash) + DEVICE_CONFIG_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceConfig().hashCode();
+      }
+      hash = (37 * hash) + DEVICE_OPERATIONAL_STATUS_FIELD_NUMBER;
+      hash = (53 * hash) + deviceOperationalStatus_;
+      if (getDeviceDriversCount() > 0) {
+        hash = (37 * hash) + DEVICE_DRIVERS_FIELD_NUMBER;
+        hash = (53 * hash) + deviceDrivers_.hashCode();
+      }
+      if (getDeviceEndpointsCount() > 0) {
+        hash = (37 * hash) + DEVICE_ENDPOINTS_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceEndpointsList().hashCode();
+      }
+      if (getComponentCount() > 0) {
+        hash = (37 * hash) + COMPONENT_FIELD_NUMBER;
+        hash = (53 * hash) + getComponentList().hashCode();
+      }
+      if (hasControllerId()) {
+        hash = (37 * hash) + CONTROLLER_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getControllerId().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.DeviceConfig parseFrom(
+    public static context.ContextOuterClass.Device parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(
+    public static context.ContextOuterClass.Device parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(
+    public static context.ContextOuterClass.Device parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(
+    public static context.ContextOuterClass.Device parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(byte[] data)
+    public static context.ContextOuterClass.Device parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(
+    public static context.ContextOuterClass.Device parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Device parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(
+    public static context.ContextOuterClass.Device parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceConfig parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Device parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceConfig parseDelimitedFrom(
+    public static context.ContextOuterClass.Device parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(
+    public static context.ContextOuterClass.Device parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(
+    public static context.ContextOuterClass.Device parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -15238,7 +16372,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.DeviceConfig prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Device prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -15254,26 +16388,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.DeviceConfig}
+     * Protobuf type {@code context.Device}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.DeviceConfig)
-        context.ContextOuterClass.DeviceConfigOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Device)
+        context.ContextOuterClass.DeviceOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_DeviceConfig_descriptor;
+        return context.ContextOuterClass.internal_static_context_Device_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_DeviceConfig_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Device_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.DeviceConfig.class, context.ContextOuterClass.DeviceConfig.Builder.class);
+                context.ContextOuterClass.Device.class, context.ContextOuterClass.Device.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.DeviceConfig.newBuilder()
+      // Construct using context.ContextOuterClass.Device.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -15286,17 +16420,50 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getConfigRulesFieldBuilder();
+          getDeviceEndpointsFieldBuilder();
+          getComponentFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (configRulesBuilder_ == null) {
-          configRules_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
         } else {
-          configRulesBuilder_.clear();
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+        name_ = "";
+
+        deviceType_ = "";
+
+        if (deviceConfigBuilder_ == null) {
+          deviceConfig_ = null;
+        } else {
+          deviceConfig_ = null;
+          deviceConfigBuilder_ = null;
+        }
+        deviceOperationalStatus_ = 0;
+
+        deviceDrivers_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        if (deviceEndpointsBuilder_ == null) {
+          deviceEndpoints_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          deviceEndpointsBuilder_.clear();
+        }
+        if (componentBuilder_ == null) {
+          component_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
+        } else {
+          componentBuilder_.clear();
+        }
+        if (controllerIdBuilder_ == null) {
+          controllerId_ = null;
+        } else {
+          controllerId_ = null;
+          controllerIdBuilder_ = null;
         }
         return this;
       }
@@ -15304,17 +16471,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_DeviceConfig_descriptor;
+        return context.ContextOuterClass.internal_static_context_Device_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceConfig getDefaultInstanceForType() {
-        return context.ContextOuterClass.DeviceConfig.getDefaultInstance();
+      public context.ContextOuterClass.Device getDefaultInstanceForType() {
+        return context.ContextOuterClass.Device.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceConfig build() {
-        context.ContextOuterClass.DeviceConfig result = buildPartial();
+      public context.ContextOuterClass.Device build() {
+        context.ContextOuterClass.Device result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -15322,17 +16489,49 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceConfig buildPartial() {
-        context.ContextOuterClass.DeviceConfig result = new context.ContextOuterClass.DeviceConfig(this);
+      public context.ContextOuterClass.Device buildPartial() {
+        context.ContextOuterClass.Device result = new context.ContextOuterClass.Device(this);
         int from_bitField0_ = bitField0_;
-        if (configRulesBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            configRules_ = java.util.Collections.unmodifiableList(configRules_);
-            bitField0_ = (bitField0_ & ~0x00000001);
+        if (deviceIdBuilder_ == null) {
+          result.deviceId_ = deviceId_;
+        } else {
+          result.deviceId_ = deviceIdBuilder_.build();
+        }
+        result.name_ = name_;
+        result.deviceType_ = deviceType_;
+        if (deviceConfigBuilder_ == null) {
+          result.deviceConfig_ = deviceConfig_;
+        } else {
+          result.deviceConfig_ = deviceConfigBuilder_.build();
+        }
+        result.deviceOperationalStatus_ = deviceOperationalStatus_;
+        if (((bitField0_ & 0x00000001) != 0)) {
+          deviceDrivers_ = java.util.Collections.unmodifiableList(deviceDrivers_);
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
+        result.deviceDrivers_ = deviceDrivers_;
+        if (deviceEndpointsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            deviceEndpoints_ = java.util.Collections.unmodifiableList(deviceEndpoints_);
+            bitField0_ = (bitField0_ & ~0x00000002);
           }
-          result.configRules_ = configRules_;
+          result.deviceEndpoints_ = deviceEndpoints_;
         } else {
-          result.configRules_ = configRulesBuilder_.build();
+          result.deviceEndpoints_ = deviceEndpointsBuilder_.build();
+        }
+        if (componentBuilder_ == null) {
+          if (((bitField0_ & 0x00000004) != 0)) {
+            component_ = java.util.Collections.unmodifiableList(component_);
+            bitField0_ = (bitField0_ & ~0x00000004);
+          }
+          result.component_ = component_;
+        } else {
+          result.component_ = componentBuilder_.build();
+        }
+        if (controllerIdBuilder_ == null) {
+          result.controllerId_ = controllerId_;
+        } else {
+          result.controllerId_ = controllerIdBuilder_.build();
         }
         onBuilt();
         return result;
@@ -15372,42 +16571,98 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.DeviceConfig) {
-          return mergeFrom((context.ContextOuterClass.DeviceConfig)other);
+        if (other instanceof context.ContextOuterClass.Device) {
+          return mergeFrom((context.ContextOuterClass.Device)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.DeviceConfig other) {
-        if (other == context.ContextOuterClass.DeviceConfig.getDefaultInstance()) return this;
-        if (configRulesBuilder_ == null) {
-          if (!other.configRules_.isEmpty()) {
-            if (configRules_.isEmpty()) {
-              configRules_ = other.configRules_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureConfigRulesIsMutable();
-              configRules_.addAll(other.configRules_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.configRules_.isEmpty()) {
-            if (configRulesBuilder_.isEmpty()) {
-              configRulesBuilder_.dispose();
-              configRulesBuilder_ = null;
-              configRules_ = other.configRules_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              configRulesBuilder_ = 
+      public Builder mergeFrom(context.ContextOuterClass.Device other) {
+        if (other == context.ContextOuterClass.Device.getDefaultInstance()) return this;
+        if (other.hasDeviceId()) {
+          mergeDeviceId(other.getDeviceId());
+        }
+        if (!other.getName().isEmpty()) {
+          name_ = other.name_;
+          onChanged();
+        }
+        if (!other.getDeviceType().isEmpty()) {
+          deviceType_ = other.deviceType_;
+          onChanged();
+        }
+        if (other.hasDeviceConfig()) {
+          mergeDeviceConfig(other.getDeviceConfig());
+        }
+        if (other.deviceOperationalStatus_ != 0) {
+          setDeviceOperationalStatusValue(other.getDeviceOperationalStatusValue());
+        }
+        if (!other.deviceDrivers_.isEmpty()) {
+          if (deviceDrivers_.isEmpty()) {
+            deviceDrivers_ = other.deviceDrivers_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureDeviceDriversIsMutable();
+            deviceDrivers_.addAll(other.deviceDrivers_);
+          }
+          onChanged();
+        }
+        if (deviceEndpointsBuilder_ == null) {
+          if (!other.deviceEndpoints_.isEmpty()) {
+            if (deviceEndpoints_.isEmpty()) {
+              deviceEndpoints_ = other.deviceEndpoints_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureDeviceEndpointsIsMutable();
+              deviceEndpoints_.addAll(other.deviceEndpoints_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.deviceEndpoints_.isEmpty()) {
+            if (deviceEndpointsBuilder_.isEmpty()) {
+              deviceEndpointsBuilder_.dispose();
+              deviceEndpointsBuilder_ = null;
+              deviceEndpoints_ = other.deviceEndpoints_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              deviceEndpointsBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getConfigRulesFieldBuilder() : null;
+                   getDeviceEndpointsFieldBuilder() : null;
             } else {
-              configRulesBuilder_.addAllMessages(other.configRules_);
+              deviceEndpointsBuilder_.addAllMessages(other.deviceEndpoints_);
+            }
+          }
+        }
+        if (componentBuilder_ == null) {
+          if (!other.component_.isEmpty()) {
+            if (component_.isEmpty()) {
+              component_ = other.component_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+            } else {
+              ensureComponentIsMutable();
+              component_.addAll(other.component_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.component_.isEmpty()) {
+            if (componentBuilder_.isEmpty()) {
+              componentBuilder_.dispose();
+              componentBuilder_ = null;
+              component_ = other.component_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+              componentBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getComponentFieldBuilder() : null;
+            } else {
+              componentBuilder_.addAllMessages(other.component_);
             }
           }
         }
+        if (other.hasControllerId()) {
+          mergeControllerId(other.getControllerId());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -15423,11 +16678,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.DeviceConfig parsedMessage = null;
+        context.ContextOuterClass.Device parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.DeviceConfig) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Device) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -15438,1037 +16693,1295 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.ConfigRule> configRules_ =
-        java.util.Collections.emptyList();
-      private void ensureConfigRulesIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>(configRules_);
-          bitField0_ |= 0x00000001;
-         }
+      private context.ContextOuterClass.DeviceId deviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
+      /**
+       * <code>.context.DeviceId device_id = 1;</code>
+       * @return Whether the deviceId field is set.
+       */
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
       }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> configRulesBuilder_;
-
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.DeviceId device_id = 1;</code>
+       * @return The deviceId.
        */
-      public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
-        if (configRulesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(configRules_);
+      public context.ContextOuterClass.DeviceId getDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         } else {
-          return configRulesBuilder_.getMessageList();
+          return deviceIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.DeviceId device_id = 1;</code>
        */
-      public int getConfigRulesCount() {
-        if (configRulesBuilder_ == null) {
-          return configRules_.size();
+      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          deviceId_ = value;
+          onChanged();
         } else {
-          return configRulesBuilder_.getCount();
+          deviceIdBuilder_.setMessage(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.DeviceId device_id = 1;</code>
        */
-      public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
-        if (configRulesBuilder_ == null) {
-          return configRules_.get(index);
+      public Builder setDeviceId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = builderForValue.build();
+          onChanged();
         } else {
-          return configRulesBuilder_.getMessage(index);
+          deviceIdBuilder_.setMessage(builderForValue.build());
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.DeviceId device_id = 1;</code>
        */
-      public Builder setConfigRules(
-          int index, context.ContextOuterClass.ConfigRule value) {
-        if (configRulesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (deviceId_ != null) {
+            deviceId_ =
+              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+          } else {
+            deviceId_ = value;
           }
-          ensureConfigRulesIsMutable();
-          configRules_.set(index, value);
           onChanged();
         } else {
-          configRulesBuilder_.setMessage(index, value);
+          deviceIdBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.DeviceId device_id = 1;</code>
        */
-      public Builder setConfigRules(
-          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.set(index, builderForValue.build());
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
           onChanged();
         } else {
-          configRulesBuilder_.setMessage(index, builderForValue.build());
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.DeviceId device_id = 1;</code>
        */
-      public Builder addConfigRules(context.ContextOuterClass.ConfigRule value) {
-        if (configRulesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConfigRulesIsMutable();
-          configRules_.add(value);
-          onChanged();
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+        
+        onChanged();
+        return getDeviceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.DeviceId device_id = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+        if (deviceIdBuilder_ != null) {
+          return deviceIdBuilder_.getMessageOrBuilder();
         } else {
-          configRulesBuilder_.addMessage(value);
+          return deviceId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.DeviceId device_id = 1;</code>
        */
-      public Builder addConfigRules(
-          int index, context.ContextOuterClass.ConfigRule value) {
-        if (configRulesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConfigRulesIsMutable();
-          configRules_.add(index, value);
-          onChanged();
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdFieldBuilder() {
+        if (deviceIdBuilder_ == null) {
+          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  getDeviceId(),
+                  getParentForChildren(),
+                  isClean());
+          deviceId_ = null;
+        }
+        return deviceIdBuilder_;
+      }
+
+      private java.lang.Object name_ = "";
+      /**
+       * <code>string name = 2;</code>
+       * @return The name.
+       */
+      public java.lang.String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          name_ = s;
+          return s;
         } else {
-          configRulesBuilder_.addMessage(index, value);
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @return The bytes for name.
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
         }
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @param value The name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        name_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>string name = 2;</code>
+       * @return This builder for chaining.
        */
-      public Builder addConfigRules(
-          context.ContextOuterClass.ConfigRule.Builder builderForValue) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.add(builderForValue.build());
-          onChanged();
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @param value The bytes for name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        name_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object deviceType_ = "";
+      /**
+       * <code>string device_type = 3;</code>
+       * @return The deviceType.
+       */
+      public java.lang.String getDeviceType() {
+        java.lang.Object ref = deviceType_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          deviceType_ = s;
+          return s;
         } else {
-          configRulesBuilder_.addMessage(builderForValue.build());
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string device_type = 3;</code>
+       * @return The bytes for deviceType.
+       */
+      public com.google.protobuf.ByteString
+          getDeviceTypeBytes() {
+        java.lang.Object ref = deviceType_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          deviceType_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
         }
+      }
+      /**
+       * <code>string device_type = 3;</code>
+       * @param value The deviceType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceType(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        deviceType_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>string device_type = 3;</code>
+       * @return This builder for chaining.
        */
-      public Builder addConfigRules(
-          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.add(index, builderForValue.build());
+      public Builder clearDeviceType() {
+        
+        deviceType_ = getDefaultInstance().getDeviceType();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string device_type = 3;</code>
+       * @param value The bytes for deviceType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceTypeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        deviceType_ = value;
+        onChanged();
+        return this;
+      }
+
+      private context.ContextOuterClass.DeviceConfig deviceConfig_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder> deviceConfigBuilder_;
+      /**
+       * <code>.context.DeviceConfig device_config = 4;</code>
+       * @return Whether the deviceConfig field is set.
+       */
+      public boolean hasDeviceConfig() {
+        return deviceConfigBuilder_ != null || deviceConfig_ != null;
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 4;</code>
+       * @return The deviceConfig.
+       */
+      public context.ContextOuterClass.DeviceConfig getDeviceConfig() {
+        if (deviceConfigBuilder_ == null) {
+          return deviceConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
+        } else {
+          return deviceConfigBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 4;</code>
+       */
+      public Builder setDeviceConfig(context.ContextOuterClass.DeviceConfig value) {
+        if (deviceConfigBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          deviceConfig_ = value;
           onChanged();
         } else {
-          configRulesBuilder_.addMessage(index, builderForValue.build());
+          deviceConfigBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.DeviceConfig device_config = 4;</code>
        */
-      public Builder addAllConfigRules(
-          java.lang.Iterable<? extends context.ContextOuterClass.ConfigRule> values) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, configRules_);
+      public Builder setDeviceConfig(
+          context.ContextOuterClass.DeviceConfig.Builder builderForValue) {
+        if (deviceConfigBuilder_ == null) {
+          deviceConfig_ = builderForValue.build();
           onChanged();
         } else {
-          configRulesBuilder_.addAllMessages(values);
+          deviceConfigBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.DeviceConfig device_config = 4;</code>
        */
-      public Builder clearConfigRules() {
-        if (configRulesBuilder_ == null) {
-          configRules_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder mergeDeviceConfig(context.ContextOuterClass.DeviceConfig value) {
+        if (deviceConfigBuilder_ == null) {
+          if (deviceConfig_ != null) {
+            deviceConfig_ =
+              context.ContextOuterClass.DeviceConfig.newBuilder(deviceConfig_).mergeFrom(value).buildPartial();
+          } else {
+            deviceConfig_ = value;
+          }
           onChanged();
         } else {
-          configRulesBuilder_.clear();
+          deviceConfigBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.DeviceConfig device_config = 4;</code>
        */
-      public Builder removeConfigRules(int index) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.remove(index);
+      public Builder clearDeviceConfig() {
+        if (deviceConfigBuilder_ == null) {
+          deviceConfig_ = null;
           onChanged();
         } else {
-          configRulesBuilder_.remove(index);
+          deviceConfig_ = null;
+          deviceConfigBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.DeviceConfig device_config = 4;</code>
        */
-      public context.ContextOuterClass.ConfigRule.Builder getConfigRulesBuilder(
-          int index) {
-        return getConfigRulesFieldBuilder().getBuilder(index);
+      public context.ContextOuterClass.DeviceConfig.Builder getDeviceConfigBuilder() {
+        
+        onChanged();
+        return getDeviceConfigFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.DeviceConfig device_config = 4;</code>
        */
-      public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
-          int index) {
-        if (configRulesBuilder_ == null) {
-          return configRules_.get(index);  } else {
-          return configRulesBuilder_.getMessageOrBuilder(index);
+      public context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder() {
+        if (deviceConfigBuilder_ != null) {
+          return deviceConfigBuilder_.getMessageOrBuilder();
+        } else {
+          return deviceConfig_ == null ?
+              context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
         }
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.DeviceConfig device_config = 4;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
-           getConfigRulesOrBuilderList() {
-        if (configRulesBuilder_ != null) {
-          return configRulesBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(configRules_);
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder> 
+          getDeviceConfigFieldBuilder() {
+        if (deviceConfigBuilder_ == null) {
+          deviceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder>(
+                  getDeviceConfig(),
+                  getParentForChildren(),
+                  isClean());
+          deviceConfig_ = null;
         }
+        return deviceConfigBuilder_;
       }
+
+      private int deviceOperationalStatus_ = 0;
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 5;</code>
+       * @return The enum numeric value on the wire for deviceOperationalStatus.
        */
-      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder() {
-        return getConfigRulesFieldBuilder().addBuilder(
-            context.ContextOuterClass.ConfigRule.getDefaultInstance());
+      @java.lang.Override public int getDeviceOperationalStatusValue() {
+        return deviceOperationalStatus_;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 5;</code>
+       * @param value The enum numeric value on the wire for deviceOperationalStatus to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder(
-          int index) {
-        return getConfigRulesFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ConfigRule.getDefaultInstance());
+      public Builder setDeviceOperationalStatusValue(int value) {
+        
+        deviceOperationalStatus_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 5;</code>
+       * @return The deviceOperationalStatus.
        */
-      public java.util.List<context.ContextOuterClass.ConfigRule.Builder> 
-           getConfigRulesBuilderList() {
-        return getConfigRulesFieldBuilder().getBuilderList();
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceOperationalStatusEnum getDeviceOperationalStatus() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.DeviceOperationalStatusEnum result = context.ContextOuterClass.DeviceOperationalStatusEnum.valueOf(deviceOperationalStatus_);
+        return result == null ? context.ContextOuterClass.DeviceOperationalStatusEnum.UNRECOGNIZED : result;
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> 
-          getConfigRulesFieldBuilder() {
-        if (configRulesBuilder_ == null) {
-          configRulesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder>(
-                  configRules_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          configRules_ = null;
+      /**
+       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 5;</code>
+       * @param value The deviceOperationalStatus to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceOperationalStatus(context.ContextOuterClass.DeviceOperationalStatusEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
-        return configRulesBuilder_;
+        
+        deviceOperationalStatus_ = value.getNumber();
+        onChanged();
+        return this;
       }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
+      /**
+       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDeviceOperationalStatus() {
+        
+        deviceOperationalStatus_ = 0;
+        onChanged();
+        return this;
       }
 
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
+      private java.util.List<java.lang.Integer> deviceDrivers_ =
+        java.util.Collections.emptyList();
+      private void ensureDeviceDriversIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          deviceDrivers_ = new java.util.ArrayList<java.lang.Integer>(deviceDrivers_);
+          bitField0_ |= 0x00000001;
+        }
       }
-
-
-      // @@protoc_insertion_point(builder_scope:context.DeviceConfig)
-    }
-
-    // @@protoc_insertion_point(class_scope:context.DeviceConfig)
-    private static final context.ContextOuterClass.DeviceConfig DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceConfig();
-    }
-
-    public static context.ContextOuterClass.DeviceConfig getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<DeviceConfig>
-        PARSER = new com.google.protobuf.AbstractParser<DeviceConfig>() {
-      @java.lang.Override
-      public DeviceConfig parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new DeviceConfig(input, extensionRegistry);
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 6;</code>
+       * @return A list containing the deviceDrivers.
+       */
+      public java.util.List<context.ContextOuterClass.DeviceDriverEnum> getDeviceDriversList() {
+        return new com.google.protobuf.Internal.ListAdapter<
+            java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum>(deviceDrivers_, deviceDrivers_converter_);
       }
-    };
-
-    public static com.google.protobuf.Parser<DeviceConfig> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<DeviceConfig> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceConfig getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface DeviceIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.DeviceIdList)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
-     */
-    java.util.List<context.ContextOuterClass.DeviceId> 
-        getDeviceIdsList();
-    /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
-     */
-    context.ContextOuterClass.DeviceId getDeviceIds(int index);
-    /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
-     */
-    int getDeviceIdsCount();
-    /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
-        getDeviceIdsOrBuilderList();
-    /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
-     */
-    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
-        int index);
-  }
-  /**
-   * Protobuf type {@code context.DeviceIdList}
-   */
-  public static final class DeviceIdList extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.DeviceIdList)
-      DeviceIdListOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use DeviceIdList.newBuilder() to construct.
-    private DeviceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private DeviceIdList() {
-      deviceIds_ = java.util.Collections.emptyList();
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new DeviceIdList();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private DeviceIdList(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 6;</code>
+       * @return The count of deviceDrivers.
+       */
+      public int getDeviceDriversCount() {
+        return deviceDrivers_.size();
       }
-      int mutable_bitField0_ = 0;
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              deviceIds_.add(
-                  input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry));
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 6;</code>
+       * @param index The index of the element to return.
+       * @return The deviceDrivers at the given index.
+       */
+      public context.ContextOuterClass.DeviceDriverEnum getDeviceDrivers(int index) {
+        return deviceDrivers_converter_.convert(deviceDrivers_.get(index));
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 6;</code>
+       * @param index The index to set the value at.
+       * @param value The deviceDrivers to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceDrivers(
+          int index, context.ContextOuterClass.DeviceDriverEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
+        ensureDeviceDriversIsMutable();
+        deviceDrivers_.set(index, value.getNumber());
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 6;</code>
+       * @param value The deviceDrivers to add.
+       * @return This builder for chaining.
+       */
+      public Builder addDeviceDrivers(context.ContextOuterClass.DeviceDriverEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
+        ensureDeviceDriversIsMutable();
+        deviceDrivers_.add(value.getNumber());
+        onChanged();
+        return this;
       }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_DeviceIdList_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_DeviceIdList_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.DeviceIdList.class, context.ContextOuterClass.DeviceIdList.Builder.class);
-    }
-
-    public static final int DEVICE_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_;
-    /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
-      return deviceIds_;
-    }
-    /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
-        getDeviceIdsOrBuilderList() {
-      return deviceIds_;
-    }
-    /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
-     */
-    @java.lang.Override
-    public int getDeviceIdsCount() {
-      return deviceIds_.size();
-    }
-    /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
-      return deviceIds_.get(index);
-    }
-    /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
-        int index) {
-      return deviceIds_.get(index);
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      for (int i = 0; i < deviceIds_.size(); i++) {
-        output.writeMessage(1, deviceIds_.get(i));
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 6;</code>
+       * @param values The deviceDrivers to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllDeviceDrivers(
+          java.lang.Iterable<? extends context.ContextOuterClass.DeviceDriverEnum> values) {
+        ensureDeviceDriversIsMutable();
+        for (context.ContextOuterClass.DeviceDriverEnum value : values) {
+          deviceDrivers_.add(value.getNumber());
+        }
+        onChanged();
+        return this;
       }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      for (int i = 0; i < deviceIds_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, deviceIds_.get(i));
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 6;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDeviceDrivers() {
+        deviceDrivers_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
+        return this;
       }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 6;</code>
+       * @return A list containing the enum numeric values on the wire for deviceDrivers.
+       */
+      public java.util.List<java.lang.Integer>
+      getDeviceDriversValueList() {
+        return java.util.Collections.unmodifiableList(deviceDrivers_);
       }
-      if (!(obj instanceof context.ContextOuterClass.DeviceIdList)) {
-        return super.equals(obj);
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 6;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of deviceDrivers at the given index.
+       */
+      public int getDeviceDriversValue(int index) {
+        return deviceDrivers_.get(index);
       }
-      context.ContextOuterClass.DeviceIdList other = (context.ContextOuterClass.DeviceIdList) obj;
-
-      if (!getDeviceIdsList()
-          .equals(other.getDeviceIdsList())) return false;
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 6;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of deviceDrivers at the given index.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceDriversValue(
+          int index, int value) {
+        ensureDeviceDriversIsMutable();
+        deviceDrivers_.set(index, value);
+        onChanged();
+        return this;
       }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (getDeviceIdsCount() > 0) {
-        hash = (37 * hash) + DEVICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceIdsList().hashCode();
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 6;</code>
+       * @param value The enum numeric value on the wire for deviceDrivers to add.
+       * @return This builder for chaining.
+       */
+      public Builder addDeviceDriversValue(int value) {
+        ensureDeviceDriversIsMutable();
+        deviceDrivers_.add(value);
+        onChanged();
+        return this;
       }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static context.ContextOuterClass.DeviceIdList parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static context.ContextOuterClass.DeviceIdList parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.DeviceIdList parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(context.ContextOuterClass.DeviceIdList prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code context.DeviceIdList}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.DeviceIdList)
-        context.ContextOuterClass.DeviceIdListOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_DeviceIdList_descriptor;
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 6;</code>
+       * @param values The enum numeric values on the wire for deviceDrivers to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllDeviceDriversValue(
+          java.lang.Iterable<java.lang.Integer> values) {
+        ensureDeviceDriversIsMutable();
+        for (int value : values) {
+          deviceDrivers_.add(value);
+        }
+        onChanged();
+        return this;
       }
 
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_DeviceIdList_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.DeviceIdList.class, context.ContextOuterClass.DeviceIdList.Builder.class);
+      private java.util.List<context.ContextOuterClass.EndPoint> deviceEndpoints_ =
+        java.util.Collections.emptyList();
+      private void ensureDeviceEndpointsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          deviceEndpoints_ = new java.util.ArrayList<context.ContextOuterClass.EndPoint>(deviceEndpoints_);
+          bitField0_ |= 0x00000002;
+         }
       }
 
-      // Construct using context.ContextOuterClass.DeviceIdList.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPoint, context.ContextOuterClass.EndPoint.Builder, context.ContextOuterClass.EndPointOrBuilder> deviceEndpointsBuilder_;
 
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-          getDeviceIdsFieldBuilder();
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPoint> getDeviceEndpointsList() {
+        if (deviceEndpointsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(deviceEndpoints_);
+        } else {
+          return deviceEndpointsBuilder_.getMessageList();
         }
       }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (deviceIdsBuilder_ == null) {
-          deviceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+       */
+      public int getDeviceEndpointsCount() {
+        if (deviceEndpointsBuilder_ == null) {
+          return deviceEndpoints_.size();
         } else {
-          deviceIdsBuilder_.clear();
+          return deviceEndpointsBuilder_.getCount();
         }
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_DeviceIdList_descriptor;
-      }
-
-      @java.lang.Override
-      public context.ContextOuterClass.DeviceIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.DeviceIdList.getDefaultInstance();
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.DeviceIdList build() {
-        context.ContextOuterClass.DeviceIdList result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+       */
+      public context.ContextOuterClass.EndPoint getDeviceEndpoints(int index) {
+        if (deviceEndpointsBuilder_ == null) {
+          return deviceEndpoints_.get(index);
+        } else {
+          return deviceEndpointsBuilder_.getMessage(index);
         }
-        return result;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.DeviceIdList buildPartial() {
-        context.ContextOuterClass.DeviceIdList result = new context.ContextOuterClass.DeviceIdList(this);
-        int from_bitField0_ = bitField0_;
-        if (deviceIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+       */
+      public Builder setDeviceEndpoints(
+          int index, context.ContextOuterClass.EndPoint value) {
+        if (deviceEndpointsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
-          result.deviceIds_ = deviceIds_;
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.set(index, value);
+          onChanged();
         } else {
-          result.deviceIds_ = deviceIdsBuilder_.build();
+          deviceEndpointsBuilder_.setMessage(index, value);
         }
-        onBuilt();
-        return result;
+        return this;
       }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+       */
+      public Builder setDeviceEndpoints(
+          int index, context.ContextOuterClass.EndPoint.Builder builderForValue) {
+        if (deviceEndpointsBuilder_ == null) {
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+       */
+      public Builder addDeviceEndpoints(context.ContextOuterClass.EndPoint value) {
+        if (deviceEndpointsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.add(value);
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.addMessage(value);
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+       */
+      public Builder addDeviceEndpoints(
+          int index, context.ContextOuterClass.EndPoint value) {
+        if (deviceEndpointsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.add(index, value);
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.addMessage(index, value);
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+       */
+      public Builder addDeviceEndpoints(
+          context.ContextOuterClass.EndPoint.Builder builderForValue) {
+        if (deviceEndpointsBuilder_ == null) {
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.add(builderForValue.build());
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+       */
+      public Builder addDeviceEndpoints(
+          int index, context.ContextOuterClass.EndPoint.Builder builderForValue) {
+        if (deviceEndpointsBuilder_ == null) {
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+       */
+      public Builder addAllDeviceEndpoints(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPoint> values) {
+        if (deviceEndpointsBuilder_ == null) {
+          ensureDeviceEndpointsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, deviceEndpoints_);
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.addAllMessages(values);
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.DeviceIdList) {
-          return mergeFrom((context.ContextOuterClass.DeviceIdList)other);
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+       */
+      public Builder clearDeviceEndpoints() {
+        if (deviceEndpointsBuilder_ == null) {
+          deviceEndpoints_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
         } else {
-          super.mergeFrom(other);
-          return this;
+          deviceEndpointsBuilder_.clear();
         }
+        return this;
       }
-
-      public Builder mergeFrom(context.ContextOuterClass.DeviceIdList other) {
-        if (other == context.ContextOuterClass.DeviceIdList.getDefaultInstance()) return this;
-        if (deviceIdsBuilder_ == null) {
-          if (!other.deviceIds_.isEmpty()) {
-            if (deviceIds_.isEmpty()) {
-              deviceIds_ = other.deviceIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureDeviceIdsIsMutable();
-              deviceIds_.addAll(other.deviceIds_);
-            }
-            onChanged();
-          }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+       */
+      public Builder removeDeviceEndpoints(int index) {
+        if (deviceEndpointsBuilder_ == null) {
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.remove(index);
+          onChanged();
         } else {
-          if (!other.deviceIds_.isEmpty()) {
-            if (deviceIdsBuilder_.isEmpty()) {
-              deviceIdsBuilder_.dispose();
-              deviceIdsBuilder_ = null;
-              deviceIds_ = other.deviceIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              deviceIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getDeviceIdsFieldBuilder() : null;
-            } else {
-              deviceIdsBuilder_.addAllMessages(other.deviceIds_);
-            }
-          }
+          deviceEndpointsBuilder_.remove(index);
         }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
         return this;
       }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+       */
+      public context.ContextOuterClass.EndPoint.Builder getDeviceEndpointsBuilder(
+          int index) {
+        return getDeviceEndpointsFieldBuilder().getBuilder(index);
       }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.DeviceIdList parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.DeviceIdList) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+       */
+      public context.ContextOuterClass.EndPointOrBuilder getDeviceEndpointsOrBuilder(
+          int index) {
+        if (deviceEndpointsBuilder_ == null) {
+          return deviceEndpoints_.get(index);  } else {
+          return deviceEndpointsBuilder_.getMessageOrBuilder(index);
         }
-        return this;
       }
-      private int bitField0_;
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.EndPointOrBuilder> 
+           getDeviceEndpointsOrBuilderList() {
+        if (deviceEndpointsBuilder_ != null) {
+          return deviceEndpointsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(deviceEndpoints_);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+       */
+      public context.ContextOuterClass.EndPoint.Builder addDeviceEndpointsBuilder() {
+        return getDeviceEndpointsFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPoint.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+       */
+      public context.ContextOuterClass.EndPoint.Builder addDeviceEndpointsBuilder(
+          int index) {
+        return getDeviceEndpointsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPoint.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 7;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPoint.Builder> 
+           getDeviceEndpointsBuilderList() {
+        return getDeviceEndpointsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPoint, context.ContextOuterClass.EndPoint.Builder, context.ContextOuterClass.EndPointOrBuilder> 
+          getDeviceEndpointsFieldBuilder() {
+        if (deviceEndpointsBuilder_ == null) {
+          deviceEndpointsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPoint, context.ContextOuterClass.EndPoint.Builder, context.ContextOuterClass.EndPointOrBuilder>(
+                  deviceEndpoints_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          deviceEndpoints_ = null;
+        }
+        return deviceEndpointsBuilder_;
+      }
 
-      private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_ =
+      private java.util.List<context.ContextOuterClass.Component> component_ =
         java.util.Collections.emptyList();
-      private void ensureDeviceIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>(deviceIds_);
-          bitField0_ |= 0x00000001;
+      private void ensureComponentIsMutable() {
+        if (!((bitField0_ & 0x00000004) != 0)) {
+          component_ = new java.util.ArrayList<context.ContextOuterClass.Component>(component_);
+          bitField0_ |= 0x00000004;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdsBuilder_;
+          context.ContextOuterClass.Component, context.ContextOuterClass.Component.Builder, context.ContextOuterClass.ComponentOrBuilder> componentBuilder_;
 
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <pre>
+       * Used for inventory
+       * </pre>
+       *
+       * <code>repeated .context.Component component = 8;</code>
        */
-      public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
-        if (deviceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(deviceIds_);
+      public java.util.List<context.ContextOuterClass.Component> getComponentList() {
+        if (componentBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(component_);
         } else {
-          return deviceIdsBuilder_.getMessageList();
+          return componentBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <pre>
+       * Used for inventory
+       * </pre>
+       *
+       * <code>repeated .context.Component component = 8;</code>
        */
-      public int getDeviceIdsCount() {
-        if (deviceIdsBuilder_ == null) {
-          return deviceIds_.size();
+      public int getComponentCount() {
+        if (componentBuilder_ == null) {
+          return component_.size();
         } else {
-          return deviceIdsBuilder_.getCount();
+          return componentBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <pre>
+       * Used for inventory
+       * </pre>
+       *
+       * <code>repeated .context.Component component = 8;</code>
        */
-      public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
-        if (deviceIdsBuilder_ == null) {
-          return deviceIds_.get(index);
+      public context.ContextOuterClass.Component getComponent(int index) {
+        if (componentBuilder_ == null) {
+          return component_.get(index);
         } else {
-          return deviceIdsBuilder_.getMessage(index);
+          return componentBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <pre>
+       * Used for inventory
+       * </pre>
+       *
+       * <code>repeated .context.Component component = 8;</code>
        */
-      public Builder setDeviceIds(
-          int index, context.ContextOuterClass.DeviceId value) {
-        if (deviceIdsBuilder_ == null) {
+      public Builder setComponent(
+          int index, context.ContextOuterClass.Component value) {
+        if (componentBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureDeviceIdsIsMutable();
-          deviceIds_.set(index, value);
+          ensureComponentIsMutable();
+          component_.set(index, value);
           onChanged();
         } else {
-          deviceIdsBuilder_.setMessage(index, value);
+          componentBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <pre>
+       * Used for inventory
+       * </pre>
+       *
+       * <code>repeated .context.Component component = 8;</code>
        */
-      public Builder setDeviceIds(
-          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
-          deviceIds_.set(index, builderForValue.build());
+      public Builder setComponent(
+          int index, context.ContextOuterClass.Component.Builder builderForValue) {
+        if (componentBuilder_ == null) {
+          ensureComponentIsMutable();
+          component_.set(index, builderForValue.build());
           onChanged();
         } else {
-          deviceIdsBuilder_.setMessage(index, builderForValue.build());
+          componentBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <pre>
+       * Used for inventory
+       * </pre>
+       *
+       * <code>repeated .context.Component component = 8;</code>
        */
-      public Builder addDeviceIds(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdsBuilder_ == null) {
+      public Builder addComponent(context.ContextOuterClass.Component value) {
+        if (componentBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureDeviceIdsIsMutable();
-          deviceIds_.add(value);
+          ensureComponentIsMutable();
+          component_.add(value);
           onChanged();
         } else {
-          deviceIdsBuilder_.addMessage(value);
+          componentBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <pre>
+       * Used for inventory
+       * </pre>
+       *
+       * <code>repeated .context.Component component = 8;</code>
        */
-      public Builder addDeviceIds(
-          int index, context.ContextOuterClass.DeviceId value) {
-        if (deviceIdsBuilder_ == null) {
+      public Builder addComponent(
+          int index, context.ContextOuterClass.Component value) {
+        if (componentBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureDeviceIdsIsMutable();
-          deviceIds_.add(index, value);
+          ensureComponentIsMutable();
+          component_.add(index, value);
           onChanged();
         } else {
-          deviceIdsBuilder_.addMessage(index, value);
+          componentBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <pre>
+       * Used for inventory
+       * </pre>
+       *
+       * <code>repeated .context.Component component = 8;</code>
        */
-      public Builder addDeviceIds(
-          context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
-          deviceIds_.add(builderForValue.build());
+      public Builder addComponent(
+          context.ContextOuterClass.Component.Builder builderForValue) {
+        if (componentBuilder_ == null) {
+          ensureComponentIsMutable();
+          component_.add(builderForValue.build());
           onChanged();
         } else {
-          deviceIdsBuilder_.addMessage(builderForValue.build());
+          componentBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <pre>
+       * Used for inventory
+       * </pre>
+       *
+       * <code>repeated .context.Component component = 8;</code>
        */
-      public Builder addDeviceIds(
-          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
-          deviceIds_.add(index, builderForValue.build());
+      public Builder addComponent(
+          int index, context.ContextOuterClass.Component.Builder builderForValue) {
+        if (componentBuilder_ == null) {
+          ensureComponentIsMutable();
+          component_.add(index, builderForValue.build());
           onChanged();
         } else {
-          deviceIdsBuilder_.addMessage(index, builderForValue.build());
+          componentBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <pre>
+       * Used for inventory
+       * </pre>
+       *
+       * <code>repeated .context.Component component = 8;</code>
        */
-      public Builder addAllDeviceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.DeviceId> values) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
+      public Builder addAllComponent(
+          java.lang.Iterable<? extends context.ContextOuterClass.Component> values) {
+        if (componentBuilder_ == null) {
+          ensureComponentIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, deviceIds_);
+              values, component_);
           onChanged();
         } else {
-          deviceIdsBuilder_.addAllMessages(values);
+          componentBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <pre>
+       * Used for inventory
+       * </pre>
+       *
+       * <code>repeated .context.Component component = 8;</code>
        */
-      public Builder clearDeviceIds() {
-        if (deviceIdsBuilder_ == null) {
-          deviceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder clearComponent() {
+        if (componentBuilder_ == null) {
+          component_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
           onChanged();
         } else {
-          deviceIdsBuilder_.clear();
+          componentBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <pre>
+       * Used for inventory
+       * </pre>
+       *
+       * <code>repeated .context.Component component = 8;</code>
        */
-      public Builder removeDeviceIds(int index) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
-          deviceIds_.remove(index);
+      public Builder removeComponent(int index) {
+        if (componentBuilder_ == null) {
+          ensureComponentIsMutable();
+          component_.remove(index);
           onChanged();
         } else {
-          deviceIdsBuilder_.remove(index);
+          componentBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <pre>
+       * Used for inventory
+       * </pre>
+       *
+       * <code>repeated .context.Component component = 8;</code>
        */
-      public context.ContextOuterClass.DeviceId.Builder getDeviceIdsBuilder(
+      public context.ContextOuterClass.Component.Builder getComponentBuilder(
           int index) {
-        return getDeviceIdsFieldBuilder().getBuilder(index);
+        return getComponentFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <pre>
+       * Used for inventory
+       * </pre>
+       *
+       * <code>repeated .context.Component component = 8;</code>
        */
-      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+      public context.ContextOuterClass.ComponentOrBuilder getComponentOrBuilder(
           int index) {
-        if (deviceIdsBuilder_ == null) {
-          return deviceIds_.get(index);  } else {
-          return deviceIdsBuilder_.getMessageOrBuilder(index);
+        if (componentBuilder_ == null) {
+          return component_.get(index);  } else {
+          return componentBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <pre>
+       * Used for inventory
+       * </pre>
+       *
+       * <code>repeated .context.Component component = 8;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
-           getDeviceIdsOrBuilderList() {
-        if (deviceIdsBuilder_ != null) {
-          return deviceIdsBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.ComponentOrBuilder> 
+           getComponentOrBuilderList() {
+        if (componentBuilder_ != null) {
+          return componentBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(deviceIds_);
+          return java.util.Collections.unmodifiableList(component_);
         }
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <pre>
+       * Used for inventory
+       * </pre>
+       *
+       * <code>repeated .context.Component component = 8;</code>
        */
-      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder() {
-        return getDeviceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.DeviceId.getDefaultInstance());
+      public context.ContextOuterClass.Component.Builder addComponentBuilder() {
+        return getComponentFieldBuilder().addBuilder(
+            context.ContextOuterClass.Component.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <pre>
+       * Used for inventory
+       * </pre>
+       *
+       * <code>repeated .context.Component component = 8;</code>
        */
-      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder(
+      public context.ContextOuterClass.Component.Builder addComponentBuilder(
           int index) {
-        return getDeviceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.DeviceId.getDefaultInstance());
+        return getComponentFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Component.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <pre>
+       * Used for inventory
+       * </pre>
+       *
+       * <code>repeated .context.Component component = 8;</code>
        */
-      public java.util.List<context.ContextOuterClass.DeviceId.Builder> 
-           getDeviceIdsBuilderList() {
-        return getDeviceIdsFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.Component.Builder> 
+           getComponentBuilderList() {
+        return getComponentFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Component, context.ContextOuterClass.Component.Builder, context.ContextOuterClass.ComponentOrBuilder> 
+          getComponentFieldBuilder() {
+        if (componentBuilder_ == null) {
+          componentBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Component, context.ContextOuterClass.Component.Builder, context.ContextOuterClass.ComponentOrBuilder>(
+                  component_,
+                  ((bitField0_ & 0x00000004) != 0),
+                  getParentForChildren(),
+                  isClean());
+          component_ = null;
+        }
+        return componentBuilder_;
+      }
+
+      private context.ContextOuterClass.DeviceId controllerId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> controllerIdBuilder_;
+      /**
+       * <pre>
+       * Identifier of node controlling the actual device
+       * </pre>
+       *
+       * <code>.context.DeviceId controller_id = 9;</code>
+       * @return Whether the controllerId field is set.
+       */
+      public boolean hasControllerId() {
+        return controllerIdBuilder_ != null || controllerId_ != null;
+      }
+      /**
+       * <pre>
+       * Identifier of node controlling the actual device
+       * </pre>
+       *
+       * <code>.context.DeviceId controller_id = 9;</code>
+       * @return The controllerId.
+       */
+      public context.ContextOuterClass.DeviceId getControllerId() {
+        if (controllerIdBuilder_ == null) {
+          return controllerId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : controllerId_;
+        } else {
+          return controllerIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <pre>
+       * Identifier of node controlling the actual device
+       * </pre>
+       *
+       * <code>.context.DeviceId controller_id = 9;</code>
+       */
+      public Builder setControllerId(context.ContextOuterClass.DeviceId value) {
+        if (controllerIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          controllerId_ = value;
+          onChanged();
+        } else {
+          controllerIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       * Identifier of node controlling the actual device
+       * </pre>
+       *
+       * <code>.context.DeviceId controller_id = 9;</code>
+       */
+      public Builder setControllerId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (controllerIdBuilder_ == null) {
+          controllerId_ = builderForValue.build();
+          onChanged();
+        } else {
+          controllerIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       * Identifier of node controlling the actual device
+       * </pre>
+       *
+       * <code>.context.DeviceId controller_id = 9;</code>
+       */
+      public Builder mergeControllerId(context.ContextOuterClass.DeviceId value) {
+        if (controllerIdBuilder_ == null) {
+          if (controllerId_ != null) {
+            controllerId_ =
+              context.ContextOuterClass.DeviceId.newBuilder(controllerId_).mergeFrom(value).buildPartial();
+          } else {
+            controllerId_ = value;
+          }
+          onChanged();
+        } else {
+          controllerIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       * Identifier of node controlling the actual device
+       * </pre>
+       *
+       * <code>.context.DeviceId controller_id = 9;</code>
+       */
+      public Builder clearControllerId() {
+        if (controllerIdBuilder_ == null) {
+          controllerId_ = null;
+          onChanged();
+        } else {
+          controllerId_ = null;
+          controllerIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       * Identifier of node controlling the actual device
+       * </pre>
+       *
+       * <code>.context.DeviceId controller_id = 9;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getControllerIdBuilder() {
+        
+        onChanged();
+        return getControllerIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <pre>
+       * Identifier of node controlling the actual device
+       * </pre>
+       *
+       * <code>.context.DeviceId controller_id = 9;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getControllerIdOrBuilder() {
+        if (controllerIdBuilder_ != null) {
+          return controllerIdBuilder_.getMessageOrBuilder();
+        } else {
+          return controllerId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : controllerId_;
+        }
+      }
+      /**
+       * <pre>
+       * Identifier of node controlling the actual device
+       * </pre>
+       *
+       * <code>.context.DeviceId controller_id = 9;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
-          getDeviceIdsFieldBuilder() {
-        if (deviceIdsBuilder_ == null) {
-          deviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+          getControllerIdFieldBuilder() {
+        if (controllerIdBuilder_ == null) {
+          controllerIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
               context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
-                  deviceIds_,
-                  ((bitField0_ & 0x00000001) != 0),
+                  getControllerId(),
                   getParentForChildren(),
                   isClean());
-          deviceIds_ = null;
+          controllerId_ = null;
         }
-        return deviceIdsBuilder_;
+        return controllerIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -16483,95 +17996,96 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.DeviceIdList)
+      // @@protoc_insertion_point(builder_scope:context.Device)
     }
 
-    // @@protoc_insertion_point(class_scope:context.DeviceIdList)
-    private static final context.ContextOuterClass.DeviceIdList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Device)
+    private static final context.ContextOuterClass.Device DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceIdList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Device();
     }
 
-    public static context.ContextOuterClass.DeviceIdList getDefaultInstance() {
+    public static context.ContextOuterClass.Device getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<DeviceIdList>
-        PARSER = new com.google.protobuf.AbstractParser<DeviceIdList>() {
+    private static final com.google.protobuf.Parser<Device>
+        PARSER = new com.google.protobuf.AbstractParser<Device>() {
       @java.lang.Override
-      public DeviceIdList parsePartialFrom(
+      public Device parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new DeviceIdList(input, extensionRegistry);
+        return new Device(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<DeviceIdList> parser() {
+    public static com.google.protobuf.Parser<Device> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<DeviceIdList> getParserForType() {
+    public com.google.protobuf.Parser<Device> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.DeviceIdList getDefaultInstanceForType() {
+    public context.ContextOuterClass.Device getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface DeviceListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.DeviceList)
+  public interface ComponentOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Component)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.Device devices = 1;</code>
-     */
-    java.util.List<context.ContextOuterClass.Device> 
-        getDevicesList();
-    /**
-     * <code>repeated .context.Device devices = 1;</code>
+     * <code>repeated string comp_string = 1;</code>
+     * @return A list containing the compString.
      */
-    context.ContextOuterClass.Device getDevices(int index);
+    java.util.List<java.lang.String>
+        getCompStringList();
     /**
-     * <code>repeated .context.Device devices = 1;</code>
+     * <code>repeated string comp_string = 1;</code>
+     * @return The count of compString.
      */
-    int getDevicesCount();
+    int getCompStringCount();
     /**
-     * <code>repeated .context.Device devices = 1;</code>
+     * <code>repeated string comp_string = 1;</code>
+     * @param index The index of the element to return.
+     * @return The compString at the given index.
      */
-    java.util.List<? extends context.ContextOuterClass.DeviceOrBuilder> 
-        getDevicesOrBuilderList();
+    java.lang.String getCompString(int index);
     /**
-     * <code>repeated .context.Device devices = 1;</code>
+     * <code>repeated string comp_string = 1;</code>
+     * @param index The index of the value to return.
+     * @return The bytes of the compString at the given index.
      */
-    context.ContextOuterClass.DeviceOrBuilder getDevicesOrBuilder(
-        int index);
+    com.google.protobuf.ByteString
+        getCompStringBytes(int index);
   }
   /**
-   * Protobuf type {@code context.DeviceList}
+   * Protobuf type {@code context.Component}
    */
-  public static final class DeviceList extends
+  public static final class Component extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.DeviceList)
-      DeviceListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Component)
+      ComponentOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use DeviceList.newBuilder() to construct.
-    private DeviceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Component.newBuilder() to construct.
+    private Component(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private DeviceList() {
-      devices_ = java.util.Collections.emptyList();
+    private Component() {
+      compString_ = com.google.protobuf.LazyStringArrayList.EMPTY;
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new DeviceList();
+      return new Component();
     }
 
     @java.lang.Override
@@ -16579,7 +18093,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private DeviceList(
+    private Component(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -16599,12 +18113,12 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                devices_ = new java.util.ArrayList<context.ContextOuterClass.Device>();
+                compString_ = new com.google.protobuf.LazyStringArrayList();
                 mutable_bitField0_ |= 0x00000001;
               }
-              devices_.add(
-                  input.readMessage(context.ContextOuterClass.Device.parser(), extensionRegistry));
+              compString_.add(s);
               break;
             }
             default: {
@@ -16623,7 +18137,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          devices_ = java.util.Collections.unmodifiableList(devices_);
+          compString_ = compString_.getUnmodifiableView();
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -16631,55 +18145,50 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_DeviceList_descriptor;
+      return context.ContextOuterClass.internal_static_context_Component_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_DeviceList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Component_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.DeviceList.class, context.ContextOuterClass.DeviceList.Builder.class);
+              context.ContextOuterClass.Component.class, context.ContextOuterClass.Component.Builder.class);
     }
 
-    public static final int DEVICES_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Device> devices_;
+    public static final int COMP_STRING_FIELD_NUMBER = 1;
+    private com.google.protobuf.LazyStringList compString_;
     /**
-     * <code>repeated .context.Device devices = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Device> getDevicesList() {
-      return devices_;
-    }
-    /**
-     * <code>repeated .context.Device devices = 1;</code>
+     * <code>repeated string comp_string = 1;</code>
+     * @return A list containing the compString.
      */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.DeviceOrBuilder> 
-        getDevicesOrBuilderList() {
-      return devices_;
+    public com.google.protobuf.ProtocolStringList
+        getCompStringList() {
+      return compString_;
     }
     /**
-     * <code>repeated .context.Device devices = 1;</code>
+     * <code>repeated string comp_string = 1;</code>
+     * @return The count of compString.
      */
-    @java.lang.Override
-    public int getDevicesCount() {
-      return devices_.size();
+    public int getCompStringCount() {
+      return compString_.size();
     }
     /**
-     * <code>repeated .context.Device devices = 1;</code>
+     * <code>repeated string comp_string = 1;</code>
+     * @param index The index of the element to return.
+     * @return The compString at the given index.
      */
-    @java.lang.Override
-    public context.ContextOuterClass.Device getDevices(int index) {
-      return devices_.get(index);
+    public java.lang.String getCompString(int index) {
+      return compString_.get(index);
     }
     /**
-     * <code>repeated .context.Device devices = 1;</code>
+     * <code>repeated string comp_string = 1;</code>
+     * @param index The index of the value to return.
+     * @return The bytes of the compString at the given index.
      */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceOrBuilder getDevicesOrBuilder(
-        int index) {
-      return devices_.get(index);
+    public com.google.protobuf.ByteString
+        getCompStringBytes(int index) {
+      return compString_.getByteString(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -16696,8 +18205,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < devices_.size(); i++) {
-        output.writeMessage(1, devices_.get(i));
+      for (int i = 0; i < compString_.size(); i++) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, compString_.getRaw(i));
       }
       unknownFields.writeTo(output);
     }
@@ -16708,9 +18217,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < devices_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, devices_.get(i));
+      {
+        int dataSize = 0;
+        for (int i = 0; i < compString_.size(); i++) {
+          dataSize += computeStringSizeNoTag(compString_.getRaw(i));
+        }
+        size += dataSize;
+        size += 1 * getCompStringList().size();
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -16722,13 +18235,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.DeviceList)) {
+      if (!(obj instanceof context.ContextOuterClass.Component)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.DeviceList other = (context.ContextOuterClass.DeviceList) obj;
+      context.ContextOuterClass.Component other = (context.ContextOuterClass.Component) obj;
 
-      if (!getDevicesList()
-          .equals(other.getDevicesList())) return false;
+      if (!getCompStringList()
+          .equals(other.getCompStringList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -16740,78 +18253,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getDevicesCount() > 0) {
-        hash = (37 * hash) + DEVICES_FIELD_NUMBER;
-        hash = (53 * hash) + getDevicesList().hashCode();
+      if (getCompStringCount() > 0) {
+        hash = (37 * hash) + COMP_STRING_FIELD_NUMBER;
+        hash = (53 * hash) + getCompStringList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.DeviceList parseFrom(
+    public static context.ContextOuterClass.Component parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceList parseFrom(
+    public static context.ContextOuterClass.Component parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceList parseFrom(
+    public static context.ContextOuterClass.Component parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceList parseFrom(
+    public static context.ContextOuterClass.Component parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceList parseFrom(byte[] data)
+    public static context.ContextOuterClass.Component parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceList parseFrom(
+    public static context.ContextOuterClass.Component parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Component parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceList parseFrom(
+    public static context.ContextOuterClass.Component parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Component parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceList parseDelimitedFrom(
+    public static context.ContextOuterClass.Component parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceList parseFrom(
+    public static context.ContextOuterClass.Component parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceList parseFrom(
+    public static context.ContextOuterClass.Component parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -16824,7 +18337,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.DeviceList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Component prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -16840,26 +18353,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.DeviceList}
+     * Protobuf type {@code context.Component}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.DeviceList)
-        context.ContextOuterClass.DeviceListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Component)
+        context.ContextOuterClass.ComponentOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_DeviceList_descriptor;
+        return context.ContextOuterClass.internal_static_context_Component_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_DeviceList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Component_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.DeviceList.class, context.ContextOuterClass.DeviceList.Builder.class);
+                context.ContextOuterClass.Component.class, context.ContextOuterClass.Component.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.DeviceList.newBuilder()
+      // Construct using context.ContextOuterClass.Component.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -16872,35 +18385,30 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getDevicesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (devicesBuilder_ == null) {
-          devices_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          devicesBuilder_.clear();
-        }
+        compString_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000001);
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_DeviceList_descriptor;
+        return context.ContextOuterClass.internal_static_context_Component_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceList getDefaultInstanceForType() {
-        return context.ContextOuterClass.DeviceList.getDefaultInstance();
+      public context.ContextOuterClass.Component getDefaultInstanceForType() {
+        return context.ContextOuterClass.Component.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceList build() {
-        context.ContextOuterClass.DeviceList result = buildPartial();
+      public context.ContextOuterClass.Component build() {
+        context.ContextOuterClass.Component result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -16908,18 +18416,14 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceList buildPartial() {
-        context.ContextOuterClass.DeviceList result = new context.ContextOuterClass.DeviceList(this);
+      public context.ContextOuterClass.Component buildPartial() {
+        context.ContextOuterClass.Component result = new context.ContextOuterClass.Component(this);
         int from_bitField0_ = bitField0_;
-        if (devicesBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            devices_ = java.util.Collections.unmodifiableList(devices_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.devices_ = devices_;
-        } else {
-          result.devices_ = devicesBuilder_.build();
+        if (((bitField0_ & 0x00000001) != 0)) {
+          compString_ = compString_.getUnmodifiableView();
+          bitField0_ = (bitField0_ & ~0x00000001);
         }
+        result.compString_ = compString_;
         onBuilt();
         return result;
       }
@@ -16958,41 +18462,25 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.DeviceList) {
-          return mergeFrom((context.ContextOuterClass.DeviceList)other);
+        if (other instanceof context.ContextOuterClass.Component) {
+          return mergeFrom((context.ContextOuterClass.Component)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.DeviceList other) {
-        if (other == context.ContextOuterClass.DeviceList.getDefaultInstance()) return this;
-        if (devicesBuilder_ == null) {
-          if (!other.devices_.isEmpty()) {
-            if (devices_.isEmpty()) {
-              devices_ = other.devices_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureDevicesIsMutable();
-              devices_.addAll(other.devices_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.devices_.isEmpty()) {
-            if (devicesBuilder_.isEmpty()) {
-              devicesBuilder_.dispose();
-              devicesBuilder_ = null;
-              devices_ = other.devices_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              devicesBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getDevicesFieldBuilder() : null;
-            } else {
-              devicesBuilder_.addAllMessages(other.devices_);
-            }
+      public Builder mergeFrom(context.ContextOuterClass.Component other) {
+        if (other == context.ContextOuterClass.Component.getDefaultInstance()) return this;
+        if (!other.compString_.isEmpty()) {
+          if (compString_.isEmpty()) {
+            compString_ = other.compString_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureCompStringIsMutable();
+            compString_.addAll(other.compString_);
           }
+          onChanged();
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -17009,11 +18497,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.DeviceList parsedMessage = null;
+        context.ContextOuterClass.Component parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.DeviceList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Component) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -17024,245 +18512,115 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.Device> devices_ =
-        java.util.Collections.emptyList();
-      private void ensureDevicesIsMutable() {
+      private com.google.protobuf.LazyStringList compString_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      private void ensureCompStringIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          devices_ = new java.util.ArrayList<context.ContextOuterClass.Device>(devices_);
+          compString_ = new com.google.protobuf.LazyStringArrayList(compString_);
           bitField0_ |= 0x00000001;
          }
       }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder> devicesBuilder_;
-
-      /**
-       * <code>repeated .context.Device devices = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.Device> getDevicesList() {
-        if (devicesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(devices_);
-        } else {
-          return devicesBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.Device devices = 1;</code>
-       */
-      public int getDevicesCount() {
-        if (devicesBuilder_ == null) {
-          return devices_.size();
-        } else {
-          return devicesBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .context.Device devices = 1;</code>
-       */
-      public context.ContextOuterClass.Device getDevices(int index) {
-        if (devicesBuilder_ == null) {
-          return devices_.get(index);
-        } else {
-          return devicesBuilder_.getMessage(index);
-        }
-      }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>repeated string comp_string = 1;</code>
+       * @return A list containing the compString.
        */
-      public Builder setDevices(
-          int index, context.ContextOuterClass.Device value) {
-        if (devicesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureDevicesIsMutable();
-          devices_.set(index, value);
-          onChanged();
-        } else {
-          devicesBuilder_.setMessage(index, value);
-        }
-        return this;
+      public com.google.protobuf.ProtocolStringList
+          getCompStringList() {
+        return compString_.getUnmodifiableView();
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>repeated string comp_string = 1;</code>
+       * @return The count of compString.
        */
-      public Builder setDevices(
-          int index, context.ContextOuterClass.Device.Builder builderForValue) {
-        if (devicesBuilder_ == null) {
-          ensureDevicesIsMutable();
-          devices_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          devicesBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
+      public int getCompStringCount() {
+        return compString_.size();
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>repeated string comp_string = 1;</code>
+       * @param index The index of the element to return.
+       * @return The compString at the given index.
        */
-      public Builder addDevices(context.ContextOuterClass.Device value) {
-        if (devicesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureDevicesIsMutable();
-          devices_.add(value);
-          onChanged();
-        } else {
-          devicesBuilder_.addMessage(value);
-        }
-        return this;
+      public java.lang.String getCompString(int index) {
+        return compString_.get(index);
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>repeated string comp_string = 1;</code>
+       * @param index The index of the value to return.
+       * @return The bytes of the compString at the given index.
        */
-      public Builder addDevices(
-          int index, context.ContextOuterClass.Device value) {
-        if (devicesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureDevicesIsMutable();
-          devices_.add(index, value);
-          onChanged();
-        } else {
-          devicesBuilder_.addMessage(index, value);
-        }
-        return this;
+      public com.google.protobuf.ByteString
+          getCompStringBytes(int index) {
+        return compString_.getByteString(index);
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>repeated string comp_string = 1;</code>
+       * @param index The index to set the value at.
+       * @param value The compString to set.
+       * @return This builder for chaining.
        */
-      public Builder addDevices(
-          context.ContextOuterClass.Device.Builder builderForValue) {
-        if (devicesBuilder_ == null) {
-          ensureDevicesIsMutable();
-          devices_.add(builderForValue.build());
-          onChanged();
-        } else {
-          devicesBuilder_.addMessage(builderForValue.build());
-        }
+      public Builder setCompString(
+          int index, java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureCompStringIsMutable();
+        compString_.set(index, value);
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>repeated string comp_string = 1;</code>
+       * @param value The compString to add.
+       * @return This builder for chaining.
        */
-      public Builder addDevices(
-          int index, context.ContextOuterClass.Device.Builder builderForValue) {
-        if (devicesBuilder_ == null) {
-          ensureDevicesIsMutable();
-          devices_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          devicesBuilder_.addMessage(index, builderForValue.build());
-        }
+      public Builder addCompString(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureCompStringIsMutable();
+        compString_.add(value);
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>repeated string comp_string = 1;</code>
+       * @param values The compString to add.
+       * @return This builder for chaining.
        */
-      public Builder addAllDevices(
-          java.lang.Iterable<? extends context.ContextOuterClass.Device> values) {
-        if (devicesBuilder_ == null) {
-          ensureDevicesIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, devices_);
-          onChanged();
-        } else {
-          devicesBuilder_.addAllMessages(values);
-        }
+      public Builder addAllCompString(
+          java.lang.Iterable<java.lang.String> values) {
+        ensureCompStringIsMutable();
+        com.google.protobuf.AbstractMessageLite.Builder.addAll(
+            values, compString_);
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>repeated string comp_string = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder clearDevices() {
-        if (devicesBuilder_ == null) {
-          devices_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          devicesBuilder_.clear();
-        }
+      public Builder clearCompString() {
+        compString_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>repeated string comp_string = 1;</code>
+       * @param value The bytes of the compString to add.
+       * @return This builder for chaining.
        */
-      public Builder removeDevices(int index) {
-        if (devicesBuilder_ == null) {
-          ensureDevicesIsMutable();
-          devices_.remove(index);
-          onChanged();
-        } else {
-          devicesBuilder_.remove(index);
-        }
+      public Builder addCompStringBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        ensureCompStringIsMutable();
+        compString_.add(value);
+        onChanged();
         return this;
       }
-      /**
-       * <code>repeated .context.Device devices = 1;</code>
-       */
-      public context.ContextOuterClass.Device.Builder getDevicesBuilder(
-          int index) {
-        return getDevicesFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.Device devices = 1;</code>
-       */
-      public context.ContextOuterClass.DeviceOrBuilder getDevicesOrBuilder(
-          int index) {
-        if (devicesBuilder_ == null) {
-          return devices_.get(index);  } else {
-          return devicesBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .context.Device devices = 1;</code>
-       */
-      public java.util.List<? extends context.ContextOuterClass.DeviceOrBuilder> 
-           getDevicesOrBuilderList() {
-        if (devicesBuilder_ != null) {
-          return devicesBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(devices_);
-        }
-      }
-      /**
-       * <code>repeated .context.Device devices = 1;</code>
-       */
-      public context.ContextOuterClass.Device.Builder addDevicesBuilder() {
-        return getDevicesFieldBuilder().addBuilder(
-            context.ContextOuterClass.Device.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.Device devices = 1;</code>
-       */
-      public context.ContextOuterClass.Device.Builder addDevicesBuilder(
-          int index) {
-        return getDevicesFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Device.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.Device devices = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.Device.Builder> 
-           getDevicesBuilderList() {
-        return getDevicesFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder> 
-          getDevicesFieldBuilder() {
-        if (devicesBuilder_ == null) {
-          devicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder>(
-                  devices_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          devices_ = null;
-        }
-        return devicesBuilder_;
-      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -17276,115 +18634,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.DeviceList)
+      // @@protoc_insertion_point(builder_scope:context.Component)
     }
 
-    // @@protoc_insertion_point(class_scope:context.DeviceList)
-    private static final context.ContextOuterClass.DeviceList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Component)
+    private static final context.ContextOuterClass.Component DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Component();
     }
 
-    public static context.ContextOuterClass.DeviceList getDefaultInstance() {
+    public static context.ContextOuterClass.Component getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<DeviceList>
-        PARSER = new com.google.protobuf.AbstractParser<DeviceList>() {
+    private static final com.google.protobuf.Parser<Component>
+        PARSER = new com.google.protobuf.AbstractParser<Component>() {
       @java.lang.Override
-      public DeviceList parsePartialFrom(
+      public Component parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new DeviceList(input, extensionRegistry);
+        return new Component(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<DeviceList> parser() {
+    public static com.google.protobuf.Parser<Component> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<DeviceList> getParserForType() {
+    public com.google.protobuf.Parser<Component> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.DeviceList getDefaultInstanceForType() {
+    public context.ContextOuterClass.Component getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface DeviceEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.DeviceEvent)
+  public interface DeviceConfigOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.DeviceConfig)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
-     */
-    boolean hasEvent();
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
-     */
-    context.ContextOuterClass.Event getEvent();
-    /**
-     * <code>.context.Event event = 1;</code>
-     */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
-
-    /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return Whether the deviceId field is set.
-     */
-    boolean hasDeviceId();
-    /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return The deviceId.
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    context.ContextOuterClass.DeviceId getDeviceId();
+    java.util.List<context.ContextOuterClass.ConfigRule> 
+        getConfigRulesList();
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
-
+    context.ContextOuterClass.ConfigRule getConfigRules(int index);
     /**
-     * <code>.context.DeviceConfig device_config = 3;</code>
-     * @return Whether the deviceConfig field is set.
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    boolean hasDeviceConfig();
+    int getConfigRulesCount();
     /**
-     * <code>.context.DeviceConfig device_config = 3;</code>
-     * @return The deviceConfig.
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    context.ContextOuterClass.DeviceConfig getDeviceConfig();
+    java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList();
     /**
-     * <code>.context.DeviceConfig device_config = 3;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder();
+    context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+        int index);
   }
   /**
-   * Protobuf type {@code context.DeviceEvent}
+   * Protobuf type {@code context.DeviceConfig}
    */
-  public static final class DeviceEvent extends
+  public static final class DeviceConfig extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.DeviceEvent)
-      DeviceEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.DeviceConfig)
+      DeviceConfigOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use DeviceEvent.newBuilder() to construct.
-    private DeviceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use DeviceConfig.newBuilder() to construct.
+    private DeviceConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private DeviceEvent() {
+    private DeviceConfig() {
+      configRules_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new DeviceEvent();
+      return new DeviceConfig();
     }
 
     @java.lang.Override
@@ -17392,7 +18730,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private DeviceEvent(
+    private DeviceConfig(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -17400,6 +18738,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -17411,48 +18750,18 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Event.Builder subBuilder = null;
-              if (event_ != null) {
-                subBuilder = event_.toBuilder();
-              }
-              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(event_);
-                event_ = subBuilder.buildPartial();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>();
+                mutable_bitField0_ |= 0x00000001;
               }
-
+              configRules_.add(
+                  input.readMessage(context.ContextOuterClass.ConfigRule.parser(), extensionRegistry));
               break;
             }
-            case 18: {
-              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
-              if (deviceId_ != null) {
-                subBuilder = deviceId_.toBuilder();
-              }
-              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(deviceId_);
-                deviceId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 26: {
-              context.ContextOuterClass.DeviceConfig.Builder subBuilder = null;
-              if (deviceConfig_ != null) {
-                subBuilder = deviceConfig_.toBuilder();
-              }
-              deviceConfig_ = input.readMessage(context.ContextOuterClass.DeviceConfig.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(deviceConfig_);
-                deviceConfig_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
               }
               break;
             }
@@ -17464,99 +18773,64 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          configRules_ = java.util.Collections.unmodifiableList(configRules_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_DeviceEvent_descriptor;
+      return context.ContextOuterClass.internal_static_context_DeviceConfig_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_DeviceEvent_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_DeviceConfig_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.DeviceEvent.class, context.ContextOuterClass.DeviceEvent.Builder.class);
-    }
-
-    public static final int EVENT_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Event event_;
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
-     */
-    @java.lang.Override
-    public boolean hasEvent() {
-      return event_ != null;
-    }
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
-    }
-    /**
-     * <code>.context.Event event = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
+              context.ContextOuterClass.DeviceConfig.class, context.ContextOuterClass.DeviceConfig.Builder.class);
     }
 
-    public static final int DEVICE_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.DeviceId deviceId_;
-    /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return Whether the deviceId field is set.
-     */
-    @java.lang.Override
-    public boolean hasDeviceId() {
-      return deviceId_ != null;
-    }
+    public static final int CONFIG_RULES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ConfigRule> configRules_;
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return The deviceId.
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceId getDeviceId() {
-      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+    public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+      return configRules_;
     }
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-      return getDeviceId();
+    public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList() {
+      return configRules_;
     }
-
-    public static final int DEVICE_CONFIG_FIELD_NUMBER = 3;
-    private context.ContextOuterClass.DeviceConfig deviceConfig_;
     /**
-     * <code>.context.DeviceConfig device_config = 3;</code>
-     * @return Whether the deviceConfig field is set.
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public boolean hasDeviceConfig() {
-      return deviceConfig_ != null;
+    public int getConfigRulesCount() {
+      return configRules_.size();
     }
     /**
-     * <code>.context.DeviceConfig device_config = 3;</code>
-     * @return The deviceConfig.
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceConfig getDeviceConfig() {
-      return deviceConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
+    public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+      return configRules_.get(index);
     }
     /**
-     * <code>.context.DeviceConfig device_config = 3;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder() {
-      return getDeviceConfig();
+    public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+        int index) {
+      return configRules_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -17573,14 +18847,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (event_ != null) {
-        output.writeMessage(1, getEvent());
-      }
-      if (deviceId_ != null) {
-        output.writeMessage(2, getDeviceId());
-      }
-      if (deviceConfig_ != null) {
-        output.writeMessage(3, getDeviceConfig());
+      for (int i = 0; i < configRules_.size(); i++) {
+        output.writeMessage(1, configRules_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -17591,17 +18859,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (event_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
-      }
-      if (deviceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getDeviceId());
-      }
-      if (deviceConfig_ != null) {
+      for (int i = 0; i < configRules_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, getDeviceConfig());
+          .computeMessageSize(1, configRules_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -17613,26 +18873,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.DeviceEvent)) {
+      if (!(obj instanceof context.ContextOuterClass.DeviceConfig)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.DeviceEvent other = (context.ContextOuterClass.DeviceEvent) obj;
+      context.ContextOuterClass.DeviceConfig other = (context.ContextOuterClass.DeviceConfig) obj;
 
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) return false;
-      }
-      if (hasDeviceId() != other.hasDeviceId()) return false;
-      if (hasDeviceId()) {
-        if (!getDeviceId()
-            .equals(other.getDeviceId())) return false;
-      }
-      if (hasDeviceConfig() != other.hasDeviceConfig()) return false;
-      if (hasDeviceConfig()) {
-        if (!getDeviceConfig()
-            .equals(other.getDeviceConfig())) return false;
-      }
+      if (!getConfigRulesList()
+          .equals(other.getConfigRulesList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -17644,86 +18891,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEvent()) {
-        hash = (37 * hash) + EVENT_FIELD_NUMBER;
-        hash = (53 * hash) + getEvent().hashCode();
-      }
-      if (hasDeviceId()) {
-        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceId().hashCode();
-      }
-      if (hasDeviceConfig()) {
-        hash = (37 * hash) + DEVICE_CONFIG_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceConfig().hashCode();
+      if (getConfigRulesCount() > 0) {
+        hash = (37 * hash) + CONFIG_RULES_FIELD_NUMBER;
+        hash = (53 * hash) + getConfigRulesList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.DeviceEvent parseFrom(
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(byte[] data)
+    public static context.ContextOuterClass.DeviceConfig parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.DeviceConfig parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceEvent parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.DeviceConfig parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceEvent parseDelimitedFrom(
+    public static context.ContextOuterClass.DeviceConfig parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -17736,7 +18975,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.DeviceEvent prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.DeviceConfig prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -17752,26 +18991,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.DeviceEvent}
+     * Protobuf type {@code context.DeviceConfig}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.DeviceEvent)
-        context.ContextOuterClass.DeviceEventOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.DeviceConfig)
+        context.ContextOuterClass.DeviceConfigOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_DeviceEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_DeviceConfig_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_DeviceEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_DeviceConfig_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.DeviceEvent.class, context.ContextOuterClass.DeviceEvent.Builder.class);
+                context.ContextOuterClass.DeviceConfig.class, context.ContextOuterClass.DeviceConfig.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.DeviceEvent.newBuilder()
+      // Construct using context.ContextOuterClass.DeviceConfig.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -17784,28 +19023,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getConfigRulesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
-        } else {
-          event_ = null;
-          eventBuilder_ = null;
-        }
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
-        } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
-        }
-        if (deviceConfigBuilder_ == null) {
-          deviceConfig_ = null;
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          deviceConfig_ = null;
-          deviceConfigBuilder_ = null;
+          configRulesBuilder_.clear();
         }
         return this;
       }
@@ -17813,17 +19041,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_DeviceEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_DeviceConfig_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.DeviceEvent.getDefaultInstance();
+      public context.ContextOuterClass.DeviceConfig getDefaultInstanceForType() {
+        return context.ContextOuterClass.DeviceConfig.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceEvent build() {
-        context.ContextOuterClass.DeviceEvent result = buildPartial();
+      public context.ContextOuterClass.DeviceConfig build() {
+        context.ContextOuterClass.DeviceConfig result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -17831,22 +19059,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceEvent buildPartial() {
-        context.ContextOuterClass.DeviceEvent result = new context.ContextOuterClass.DeviceEvent(this);
-        if (eventBuilder_ == null) {
-          result.event_ = event_;
-        } else {
-          result.event_ = eventBuilder_.build();
-        }
-        if (deviceIdBuilder_ == null) {
-          result.deviceId_ = deviceId_;
-        } else {
-          result.deviceId_ = deviceIdBuilder_.build();
-        }
-        if (deviceConfigBuilder_ == null) {
-          result.deviceConfig_ = deviceConfig_;
+      public context.ContextOuterClass.DeviceConfig buildPartial() {
+        context.ContextOuterClass.DeviceConfig result = new context.ContextOuterClass.DeviceConfig(this);
+        int from_bitField0_ = bitField0_;
+        if (configRulesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            configRules_ = java.util.Collections.unmodifiableList(configRules_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.configRules_ = configRules_;
         } else {
-          result.deviceConfig_ = deviceConfigBuilder_.build();
+          result.configRules_ = configRulesBuilder_.build();
         }
         onBuilt();
         return result;
@@ -17886,24 +19109,41 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.DeviceEvent) {
-          return mergeFrom((context.ContextOuterClass.DeviceEvent)other);
+        if (other instanceof context.ContextOuterClass.DeviceConfig) {
+          return mergeFrom((context.ContextOuterClass.DeviceConfig)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.DeviceEvent other) {
-        if (other == context.ContextOuterClass.DeviceEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
-        }
-        if (other.hasDeviceId()) {
-          mergeDeviceId(other.getDeviceId());
-        }
-        if (other.hasDeviceConfig()) {
-          mergeDeviceConfig(other.getDeviceConfig());
+      public Builder mergeFrom(context.ContextOuterClass.DeviceConfig other) {
+        if (other == context.ContextOuterClass.DeviceConfig.getDefaultInstance()) return this;
+        if (configRulesBuilder_ == null) {
+          if (!other.configRules_.isEmpty()) {
+            if (configRules_.isEmpty()) {
+              configRules_ = other.configRules_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureConfigRulesIsMutable();
+              configRules_.addAll(other.configRules_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.configRules_.isEmpty()) {
+            if (configRulesBuilder_.isEmpty()) {
+              configRulesBuilder_.dispose();
+              configRulesBuilder_ = null;
+              configRules_ = other.configRules_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              configRulesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getConfigRulesFieldBuilder() : null;
+            } else {
+              configRulesBuilder_.addAllMessages(other.configRules_);
+            }
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -17920,11 +19160,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.DeviceEvent parsedMessage = null;
+        context.ContextOuterClass.DeviceConfig parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.DeviceEvent) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.DeviceConfig) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -17933,362 +19173,246 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.ConfigRule> configRules_ =
+        java.util.Collections.emptyList();
+      private void ensureConfigRulesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>(configRules_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> configRulesBuilder_;
 
-      private context.ContextOuterClass.Event event_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return Whether the event field is set.
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
+      public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+        if (configRulesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(configRules_);
+        } else {
+          return configRulesBuilder_.getMessageList();
+        }
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+      public int getConfigRulesCount() {
+        if (configRulesBuilder_ == null) {
+          return configRules_.size();
         } else {
-          return eventBuilder_.getMessage();
+          return configRulesBuilder_.getCount();
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
+      public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);
+        } else {
+          return configRulesBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          event_ = value;
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, value);
           onChanged();
         } else {
-          eventBuilder_.setMessage(value);
+          configRulesBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, builderForValue.build());
           onChanged();
         } else {
-          eventBuilder_.setMessage(builderForValue.build());
+          configRulesBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder mergeEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
-          if (event_ != null) {
-            event_ =
-              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
-          } else {
-            event_ = value;
+      public Builder addConfigRules(context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureConfigRulesIsMutable();
+          configRules_.add(value);
           onChanged();
         } else {
-          eventBuilder_.mergeFrom(value);
+          configRulesBuilder_.addMessage(value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, value);
           onChanged();
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          configRulesBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       */
-      public context.ContextOuterClass.Event.Builder getEventBuilder() {
-        
-        onChanged();
-        return getEventFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-        if (eventBuilder_ != null) {
-          return eventBuilder_.getMessageOrBuilder();
+      public Builder addConfigRules(
+          context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(builderForValue.build());
+          onChanged();
         } else {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+          configRulesBuilder_.addMessage(builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
-          getEventFieldBuilder() {
-        if (eventBuilder_ == null) {
-          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
-                  getEvent(),
-                  getParentForChildren(),
-                  isClean());
-          event_ = null;
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(index, builderForValue.build());
         }
-        return eventBuilder_;
-      }
-
-      private context.ContextOuterClass.DeviceId deviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       * @return Whether the deviceId field is set.
-       */
-      public boolean hasDeviceId() {
-        return deviceIdBuilder_ != null || deviceId_ != null;
+        return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       * @return The deviceId.
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.DeviceId getDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+      public Builder addAllConfigRules(
+          java.lang.Iterable<? extends context.ContextOuterClass.ConfigRule> values) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, configRules_);
+          onChanged();
         } else {
-          return deviceIdBuilder_.getMessage();
+          configRulesBuilder_.addAllMessages(values);
         }
+        return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          deviceId_ = value;
+      public Builder clearConfigRules() {
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          deviceIdBuilder_.setMessage(value);
+          configRulesBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder setDeviceId(
-          context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = builderForValue.build();
+      public Builder removeConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.remove(index);
           onChanged();
         } else {
-          deviceIdBuilder_.setMessage(builderForValue.build());
+          configRulesBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (deviceId_ != null) {
-            deviceId_ =
-              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
-          } else {
-            deviceId_ = value;
-          }
-          onChanged();
-        } else {
-          deviceIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      public Builder clearDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
-          onChanged();
-        } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
-        
-        onChanged();
-        return getDeviceIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-        if (deviceIdBuilder_ != null) {
-          return deviceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return deviceId_ == null ?
-              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-        }
-      }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
-          getDeviceIdFieldBuilder() {
-        if (deviceIdBuilder_ == null) {
-          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
-                  getDeviceId(),
-                  getParentForChildren(),
-                  isClean());
-          deviceId_ = null;
-        }
-        return deviceIdBuilder_;
-      }
-
-      private context.ContextOuterClass.DeviceConfig deviceConfig_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder> deviceConfigBuilder_;
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       * @return Whether the deviceConfig field is set.
-       */
-      public boolean hasDeviceConfig() {
-        return deviceConfigBuilder_ != null || deviceConfig_ != null;
-      }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       * @return The deviceConfig.
-       */
-      public context.ContextOuterClass.DeviceConfig getDeviceConfig() {
-        if (deviceConfigBuilder_ == null) {
-          return deviceConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
-        } else {
-          return deviceConfigBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       */
-      public Builder setDeviceConfig(context.ContextOuterClass.DeviceConfig value) {
-        if (deviceConfigBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          deviceConfig_ = value;
-          onChanged();
-        } else {
-          deviceConfigBuilder_.setMessage(value);
-        }
-
-        return this;
+      public context.ContextOuterClass.ConfigRule.Builder getConfigRulesBuilder(
+          int index) {
+        return getConfigRulesFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder setDeviceConfig(
-          context.ContextOuterClass.DeviceConfig.Builder builderForValue) {
-        if (deviceConfigBuilder_ == null) {
-          deviceConfig_ = builderForValue.build();
-          onChanged();
-        } else {
-          deviceConfigBuilder_.setMessage(builderForValue.build());
+      public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+          int index) {
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);  } else {
+          return configRulesBuilder_.getMessageOrBuilder(index);
         }
-
-        return this;
       }
       /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder mergeDeviceConfig(context.ContextOuterClass.DeviceConfig value) {
-        if (deviceConfigBuilder_ == null) {
-          if (deviceConfig_ != null) {
-            deviceConfig_ =
-              context.ContextOuterClass.DeviceConfig.newBuilder(deviceConfig_).mergeFrom(value).buildPartial();
-          } else {
-            deviceConfig_ = value;
-          }
-          onChanged();
+      public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+           getConfigRulesOrBuilderList() {
+        if (configRulesBuilder_ != null) {
+          return configRulesBuilder_.getMessageOrBuilderList();
         } else {
-          deviceConfigBuilder_.mergeFrom(value);
+          return java.util.Collections.unmodifiableList(configRules_);
         }
-
-        return this;
       }
       /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder clearDeviceConfig() {
-        if (deviceConfigBuilder_ == null) {
-          deviceConfig_ = null;
-          onChanged();
-        } else {
-          deviceConfig_ = null;
-          deviceConfigBuilder_ = null;
-        }
-
-        return this;
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder() {
+        return getConfigRulesFieldBuilder().addBuilder(
+            context.ContextOuterClass.ConfigRule.getDefaultInstance());
       }
       /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.DeviceConfig.Builder getDeviceConfigBuilder() {
-        
-        onChanged();
-        return getDeviceConfigFieldBuilder().getBuilder();
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder(
+          int index) {
+        return getConfigRulesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ConfigRule.getDefaultInstance());
       }
       /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder() {
-        if (deviceConfigBuilder_ != null) {
-          return deviceConfigBuilder_.getMessageOrBuilder();
-        } else {
-          return deviceConfig_ == null ?
-              context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
-        }
+      public java.util.List<context.ContextOuterClass.ConfigRule.Builder> 
+           getConfigRulesBuilderList() {
+        return getConfigRulesFieldBuilder().getBuilderList();
       }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder> 
-          getDeviceConfigFieldBuilder() {
-        if (deviceConfigBuilder_ == null) {
-          deviceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder>(
-                  getDeviceConfig(),
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> 
+          getConfigRulesFieldBuilder() {
+        if (configRulesBuilder_ == null) {
+          configRulesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder>(
+                  configRules_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          deviceConfig_ = null;
+          configRules_ = null;
         }
-        return deviceConfigBuilder_;
+        return configRulesBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -18303,89 +19427,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.DeviceEvent)
+      // @@protoc_insertion_point(builder_scope:context.DeviceConfig)
     }
 
-    // @@protoc_insertion_point(class_scope:context.DeviceEvent)
-    private static final context.ContextOuterClass.DeviceEvent DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.DeviceConfig)
+    private static final context.ContextOuterClass.DeviceConfig DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceEvent();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceConfig();
     }
 
-    public static context.ContextOuterClass.DeviceEvent getDefaultInstance() {
+    public static context.ContextOuterClass.DeviceConfig getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<DeviceEvent>
-        PARSER = new com.google.protobuf.AbstractParser<DeviceEvent>() {
+    private static final com.google.protobuf.Parser<DeviceConfig>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceConfig>() {
       @java.lang.Override
-      public DeviceEvent parsePartialFrom(
+      public DeviceConfig parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new DeviceEvent(input, extensionRegistry);
+        return new DeviceConfig(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<DeviceEvent> parser() {
+    public static com.google.protobuf.Parser<DeviceConfig> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<DeviceEvent> getParserForType() {
+    public com.google.protobuf.Parser<DeviceConfig> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.DeviceEvent getDefaultInstanceForType() {
+    public context.ContextOuterClass.DeviceConfig getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface LinkIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.LinkId)
+  public interface DeviceIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.DeviceIdList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Uuid link_uuid = 1;</code>
-     * @return Whether the linkUuid field is set.
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
      */
-    boolean hasLinkUuid();
+    java.util.List<context.ContextOuterClass.DeviceId> 
+        getDeviceIdsList();
     /**
-     * <code>.context.Uuid link_uuid = 1;</code>
-     * @return The linkUuid.
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
      */
-    context.ContextOuterClass.Uuid getLinkUuid();
+    context.ContextOuterClass.DeviceId getDeviceIds(int index);
     /**
-     * <code>.context.Uuid link_uuid = 1;</code>
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getLinkUuidOrBuilder();
+    int getDeviceIdsCount();
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+        getDeviceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+        int index);
   }
   /**
-   * <pre>
-   * ----- Link ----------------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.LinkId}
+   * Protobuf type {@code context.DeviceIdList}
    */
-  public static final class LinkId extends
+  public static final class DeviceIdList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.LinkId)
-      LinkIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.DeviceIdList)
+      DeviceIdListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use LinkId.newBuilder() to construct.
-    private LinkId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use DeviceIdList.newBuilder() to construct.
+    private DeviceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private LinkId() {
+    private DeviceIdList() {
+      deviceIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new LinkId();
+      return new DeviceIdList();
     }
 
     @java.lang.Override
@@ -18393,7 +19523,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private LinkId(
+    private DeviceIdList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -18401,6 +19531,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -18412,16 +19543,12 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (linkUuid_ != null) {
-                subBuilder = linkUuid_.toBuilder();
-              }
-              linkUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(linkUuid_);
-                linkUuid_ = subBuilder.buildPartial();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>();
+                mutable_bitField0_ |= 0x00000001;
               }
-
+              deviceIds_.add(
+                  input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -18439,47 +19566,64 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_LinkId_descriptor;
+      return context.ContextOuterClass.internal_static_context_DeviceIdList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_LinkId_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_DeviceIdList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.LinkId.class, context.ContextOuterClass.LinkId.Builder.class);
+              context.ContextOuterClass.DeviceIdList.class, context.ContextOuterClass.DeviceIdList.Builder.class);
     }
 
-    public static final int LINK_UUID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid linkUuid_;
+    public static final int DEVICE_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_;
     /**
-     * <code>.context.Uuid link_uuid = 1;</code>
-     * @return Whether the linkUuid field is set.
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
      */
     @java.lang.Override
-    public boolean hasLinkUuid() {
-      return linkUuid_ != null;
+    public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
+      return deviceIds_;
     }
     /**
-     * <code>.context.Uuid link_uuid = 1;</code>
-     * @return The linkUuid.
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getLinkUuid() {
-      return linkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : linkUuid_;
+    public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+        getDeviceIdsOrBuilderList() {
+      return deviceIds_;
     }
     /**
-     * <code>.context.Uuid link_uuid = 1;</code>
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getLinkUuidOrBuilder() {
-      return getLinkUuid();
+    public int getDeviceIdsCount() {
+      return deviceIds_.size();
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
+      return deviceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+        int index) {
+      return deviceIds_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -18496,8 +19640,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (linkUuid_ != null) {
-        output.writeMessage(1, getLinkUuid());
+      for (int i = 0; i < deviceIds_.size(); i++) {
+        output.writeMessage(1, deviceIds_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -18508,9 +19652,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (linkUuid_ != null) {
+      for (int i = 0; i < deviceIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getLinkUuid());
+          .computeMessageSize(1, deviceIds_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -18522,16 +19666,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.LinkId)) {
+      if (!(obj instanceof context.ContextOuterClass.DeviceIdList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.LinkId other = (context.ContextOuterClass.LinkId) obj;
+      context.ContextOuterClass.DeviceIdList other = (context.ContextOuterClass.DeviceIdList) obj;
 
-      if (hasLinkUuid() != other.hasLinkUuid()) return false;
-      if (hasLinkUuid()) {
-        if (!getLinkUuid()
-            .equals(other.getLinkUuid())) return false;
-      }
+      if (!getDeviceIdsList()
+          .equals(other.getDeviceIdsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -18543,78 +19684,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasLinkUuid()) {
-        hash = (37 * hash) + LINK_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getLinkUuid().hashCode();
+      if (getDeviceIdsCount() > 0) {
+        hash = (37 * hash) + DEVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceIdsList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.LinkId parseFrom(
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkId parseFrom(
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkId parseFrom(
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkId parseFrom(
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkId parseFrom(byte[] data)
+    public static context.ContextOuterClass.DeviceIdList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkId parseFrom(
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkId parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.DeviceIdList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkId parseFrom(
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkId parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.DeviceIdList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkId parseDelimitedFrom(
+    public static context.ContextOuterClass.DeviceIdList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkId parseFrom(
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkId parseFrom(
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -18627,7 +19768,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.LinkId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.DeviceIdList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -18643,30 +19784,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Link ----------------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.LinkId}
+     * Protobuf type {@code context.DeviceIdList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.LinkId)
-        context.ContextOuterClass.LinkIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.DeviceIdList)
+        context.ContextOuterClass.DeviceIdListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_LinkId_descriptor;
+        return context.ContextOuterClass.internal_static_context_DeviceIdList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_LinkId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_DeviceIdList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.LinkId.class, context.ContextOuterClass.LinkId.Builder.class);
+                context.ContextOuterClass.DeviceIdList.class, context.ContextOuterClass.DeviceIdList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.LinkId.newBuilder()
+      // Construct using context.ContextOuterClass.DeviceIdList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -18679,16 +19816,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getDeviceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (linkUuidBuilder_ == null) {
-          linkUuid_ = null;
+        if (deviceIdsBuilder_ == null) {
+          deviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          linkUuid_ = null;
-          linkUuidBuilder_ = null;
+          deviceIdsBuilder_.clear();
         }
         return this;
       }
@@ -18696,17 +19834,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_LinkId_descriptor;
+        return context.ContextOuterClass.internal_static_context_DeviceIdList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkId getDefaultInstanceForType() {
-        return context.ContextOuterClass.LinkId.getDefaultInstance();
+      public context.ContextOuterClass.DeviceIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.DeviceIdList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkId build() {
-        context.ContextOuterClass.LinkId result = buildPartial();
+      public context.ContextOuterClass.DeviceIdList build() {
+        context.ContextOuterClass.DeviceIdList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -18714,12 +19852,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkId buildPartial() {
-        context.ContextOuterClass.LinkId result = new context.ContextOuterClass.LinkId(this);
-        if (linkUuidBuilder_ == null) {
-          result.linkUuid_ = linkUuid_;
+      public context.ContextOuterClass.DeviceIdList buildPartial() {
+        context.ContextOuterClass.DeviceIdList result = new context.ContextOuterClass.DeviceIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (deviceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.deviceIds_ = deviceIds_;
         } else {
-          result.linkUuid_ = linkUuidBuilder_.build();
+          result.deviceIds_ = deviceIdsBuilder_.build();
         }
         onBuilt();
         return result;
@@ -18759,18 +19902,41 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.LinkId) {
-          return mergeFrom((context.ContextOuterClass.LinkId)other);
+        if (other instanceof context.ContextOuterClass.DeviceIdList) {
+          return mergeFrom((context.ContextOuterClass.DeviceIdList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.LinkId other) {
-        if (other == context.ContextOuterClass.LinkId.getDefaultInstance()) return this;
-        if (other.hasLinkUuid()) {
-          mergeLinkUuid(other.getLinkUuid());
+      public Builder mergeFrom(context.ContextOuterClass.DeviceIdList other) {
+        if (other == context.ContextOuterClass.DeviceIdList.getDefaultInstance()) return this;
+        if (deviceIdsBuilder_ == null) {
+          if (!other.deviceIds_.isEmpty()) {
+            if (deviceIds_.isEmpty()) {
+              deviceIds_ = other.deviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureDeviceIdsIsMutable();
+              deviceIds_.addAll(other.deviceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.deviceIds_.isEmpty()) {
+            if (deviceIdsBuilder_.isEmpty()) {
+              deviceIdsBuilder_.dispose();
+              deviceIdsBuilder_ = null;
+              deviceIds_ = other.deviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              deviceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getDeviceIdsFieldBuilder() : null;
+            } else {
+              deviceIdsBuilder_.addAllMessages(other.deviceIds_);
+            }
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -18787,11 +19953,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.LinkId parsedMessage = null;
+        context.ContextOuterClass.DeviceIdList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.LinkId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.DeviceIdList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -18800,124 +19966,246 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureDeviceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>(deviceIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdsBuilder_;
 
-      private context.ContextOuterClass.Uuid linkUuid_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> linkUuidBuilder_;
       /**
-       * <code>.context.Uuid link_uuid = 1;</code>
-       * @return Whether the linkUuid field is set.
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
        */
-      public boolean hasLinkUuid() {
-        return linkUuidBuilder_ != null || linkUuid_ != null;
+      public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
+        if (deviceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(deviceIds_);
+        } else {
+          return deviceIdsBuilder_.getMessageList();
+        }
       }
       /**
-       * <code>.context.Uuid link_uuid = 1;</code>
-       * @return The linkUuid.
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
        */
-      public context.ContextOuterClass.Uuid getLinkUuid() {
-        if (linkUuidBuilder_ == null) {
-          return linkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : linkUuid_;
+      public int getDeviceIdsCount() {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_.size();
         } else {
-          return linkUuidBuilder_.getMessage();
+          return deviceIdsBuilder_.getCount();
         }
       }
       /**
-       * <code>.context.Uuid link_uuid = 1;</code>
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
        */
-      public Builder setLinkUuid(context.ContextOuterClass.Uuid value) {
-        if (linkUuidBuilder_ == null) {
+      public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_.get(index);
+        } else {
+          return deviceIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder setDeviceIds(
+          int index, context.ContextOuterClass.DeviceId value) {
+        if (deviceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          linkUuid_ = value;
+          ensureDeviceIdsIsMutable();
+          deviceIds_.set(index, value);
           onChanged();
         } else {
-          linkUuidBuilder_.setMessage(value);
+          deviceIdsBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid link_uuid = 1;</code>
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
        */
-      public Builder setLinkUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (linkUuidBuilder_ == null) {
-          linkUuid_ = builderForValue.build();
+      public Builder setDeviceIds(
+          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          linkUuidBuilder_.setMessage(builderForValue.build());
+          deviceIdsBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid link_uuid = 1;</code>
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
        */
-      public Builder mergeLinkUuid(context.ContextOuterClass.Uuid value) {
-        if (linkUuidBuilder_ == null) {
-          if (linkUuid_ != null) {
-            linkUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(linkUuid_).mergeFrom(value).buildPartial();
-          } else {
-            linkUuid_ = value;
+      public Builder addDeviceIds(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(value);
           onChanged();
         } else {
-          linkUuidBuilder_.mergeFrom(value);
+          deviceIdsBuilder_.addMessage(value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid link_uuid = 1;</code>
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
        */
-      public Builder clearLinkUuid() {
-        if (linkUuidBuilder_ == null) {
-          linkUuid_ = null;
+      public Builder addDeviceIds(
+          int index, context.ContextOuterClass.DeviceId value) {
+        if (deviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(index, value);
           onChanged();
         } else {
-          linkUuid_ = null;
-          linkUuidBuilder_ = null;
+          deviceIdsBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid link_uuid = 1;</code>
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getLinkUuidBuilder() {
-        
-        onChanged();
-        return getLinkUuidFieldBuilder().getBuilder();
+      public Builder addDeviceIds(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
       }
       /**
-       * <code>.context.Uuid link_uuid = 1;</code>
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getLinkUuidOrBuilder() {
-        if (linkUuidBuilder_ != null) {
-          return linkUuidBuilder_.getMessageOrBuilder();
+      public Builder addDeviceIds(
+          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(index, builderForValue.build());
+          onChanged();
         } else {
-          return linkUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : linkUuid_;
+          deviceIdsBuilder_.addMessage(index, builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.context.Uuid link_uuid = 1;</code>
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getLinkUuidFieldBuilder() {
-        if (linkUuidBuilder_ == null) {
-          linkUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getLinkUuid(),
+      public Builder addAllDeviceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.DeviceId> values) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, deviceIds_);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder clearDeviceIds() {
+        if (deviceIdsBuilder_ == null) {
+          deviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder removeDeviceIds(int index) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.remove(index);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdsBuilder(
+          int index) {
+        return getDeviceIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+          int index) {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_.get(index);  } else {
+          return deviceIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+           getDeviceIdsOrBuilderList() {
+        if (deviceIdsBuilder_ != null) {
+          return deviceIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(deviceIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder() {
+        return getDeviceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.DeviceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder(
+          int index) {
+        return getDeviceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.DeviceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.DeviceId.Builder> 
+           getDeviceIdsBuilderList() {
+        return getDeviceIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdsFieldBuilder() {
+        if (deviceIdsBuilder_ == null) {
+          deviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  deviceIds_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          linkUuid_ = null;
+          deviceIds_ = null;
         }
-        return linkUuidBuilder_;
+        return deviceIdsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -18932,110 +20220,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.LinkId)
+      // @@protoc_insertion_point(builder_scope:context.DeviceIdList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.LinkId)
-    private static final context.ContextOuterClass.LinkId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.DeviceIdList)
+    private static final context.ContextOuterClass.DeviceIdList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceIdList();
     }
 
-    public static context.ContextOuterClass.LinkId getDefaultInstance() {
+    public static context.ContextOuterClass.DeviceIdList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<LinkId>
-        PARSER = new com.google.protobuf.AbstractParser<LinkId>() {
+    private static final com.google.protobuf.Parser<DeviceIdList>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceIdList>() {
       @java.lang.Override
-      public LinkId parsePartialFrom(
+      public DeviceIdList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new LinkId(input, extensionRegistry);
+        return new DeviceIdList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<LinkId> parser() {
+    public static com.google.protobuf.Parser<DeviceIdList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<LinkId> getParserForType() {
+    public com.google.protobuf.Parser<DeviceIdList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.LinkId getDefaultInstanceForType() {
+    public context.ContextOuterClass.DeviceIdList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface LinkOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Link)
+  public interface DeviceListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.DeviceList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.LinkId link_id = 1;</code>
-     * @return Whether the linkId field is set.
-     */
-    boolean hasLinkId();
-    /**
-     * <code>.context.LinkId link_id = 1;</code>
-     * @return The linkId.
-     */
-    context.ContextOuterClass.LinkId getLinkId();
-    /**
-     * <code>.context.LinkId link_id = 1;</code>
-     */
-    context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder();
-
-    /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     * <code>repeated .context.Device devices = 1;</code>
      */
-    java.util.List<context.ContextOuterClass.EndPointId> 
-        getLinkEndpointIdsList();
+    java.util.List<context.ContextOuterClass.Device> 
+        getDevicesList();
     /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     * <code>repeated .context.Device devices = 1;</code>
      */
-    context.ContextOuterClass.EndPointId getLinkEndpointIds(int index);
+    context.ContextOuterClass.Device getDevices(int index);
     /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     * <code>repeated .context.Device devices = 1;</code>
      */
-    int getLinkEndpointIdsCount();
+    int getDevicesCount();
     /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     * <code>repeated .context.Device devices = 1;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getLinkEndpointIdsOrBuilderList();
+    java.util.List<? extends context.ContextOuterClass.DeviceOrBuilder> 
+        getDevicesOrBuilderList();
     /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     * <code>repeated .context.Device devices = 1;</code>
      */
-    context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(
+    context.ContextOuterClass.DeviceOrBuilder getDevicesOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code context.Link}
+   * Protobuf type {@code context.DeviceList}
    */
-  public static final class Link extends
+  public static final class DeviceList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Link)
-      LinkOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.DeviceList)
+      DeviceListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Link.newBuilder() to construct.
-    private Link(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use DeviceList.newBuilder() to construct.
+    private DeviceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Link() {
-      linkEndpointIds_ = java.util.Collections.emptyList();
+    private DeviceList() {
+      devices_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Link();
+      return new DeviceList();
     }
 
     @java.lang.Override
@@ -19043,7 +20316,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Link(
+    private DeviceList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -19063,25 +20336,12 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.LinkId.Builder subBuilder = null;
-              if (linkId_ != null) {
-                subBuilder = linkId_.toBuilder();
-              }
-              linkId_ = input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(linkId_);
-                linkId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                linkEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
+                devices_ = new java.util.ArrayList<context.ContextOuterClass.Device>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              linkEndpointIds_.add(
-                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
+              devices_.add(
+                  input.readMessage(context.ContextOuterClass.Device.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -19100,7 +20360,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          linkEndpointIds_ = java.util.Collections.unmodifiableList(linkEndpointIds_);
+          devices_ = java.util.Collections.unmodifiableList(devices_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -19108,81 +20368,55 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Link_descriptor;
+      return context.ContextOuterClass.internal_static_context_DeviceList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Link_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_DeviceList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Link.class, context.ContextOuterClass.Link.Builder.class);
-    }
-
-    public static final int LINK_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.LinkId linkId_;
-    /**
-     * <code>.context.LinkId link_id = 1;</code>
-     * @return Whether the linkId field is set.
-     */
-    @java.lang.Override
-    public boolean hasLinkId() {
-      return linkId_ != null;
-    }
-    /**
-     * <code>.context.LinkId link_id = 1;</code>
-     * @return The linkId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.LinkId getLinkId() {
-      return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
-    }
-    /**
-     * <code>.context.LinkId link_id = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
-      return getLinkId();
+              context.ContextOuterClass.DeviceList.class, context.ContextOuterClass.DeviceList.Builder.class);
     }
 
-    public static final int LINK_ENDPOINT_IDS_FIELD_NUMBER = 2;
-    private java.util.List<context.ContextOuterClass.EndPointId> linkEndpointIds_;
+    public static final int DEVICES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Device> devices_;
     /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     * <code>repeated .context.Device devices = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList() {
-      return linkEndpointIds_;
+    public java.util.List<context.ContextOuterClass.Device> getDevicesList() {
+      return devices_;
     }
     /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     * <code>repeated .context.Device devices = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getLinkEndpointIdsOrBuilderList() {
-      return linkEndpointIds_;
+    public java.util.List<? extends context.ContextOuterClass.DeviceOrBuilder> 
+        getDevicesOrBuilderList() {
+      return devices_;
     }
     /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     * <code>repeated .context.Device devices = 1;</code>
      */
     @java.lang.Override
-    public int getLinkEndpointIdsCount() {
-      return linkEndpointIds_.size();
+    public int getDevicesCount() {
+      return devices_.size();
     }
     /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     * <code>repeated .context.Device devices = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointId getLinkEndpointIds(int index) {
-      return linkEndpointIds_.get(index);
+    public context.ContextOuterClass.Device getDevices(int index) {
+      return devices_.get(index);
     }
     /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     * <code>repeated .context.Device devices = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(
+    public context.ContextOuterClass.DeviceOrBuilder getDevicesOrBuilder(
         int index) {
-      return linkEndpointIds_.get(index);
+      return devices_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -19199,11 +20433,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (linkId_ != null) {
-        output.writeMessage(1, getLinkId());
-      }
-      for (int i = 0; i < linkEndpointIds_.size(); i++) {
-        output.writeMessage(2, linkEndpointIds_.get(i));
+      for (int i = 0; i < devices_.size(); i++) {
+        output.writeMessage(1, devices_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -19214,13 +20445,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (linkId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getLinkId());
-      }
-      for (int i = 0; i < linkEndpointIds_.size(); i++) {
+      for (int i = 0; i < devices_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, linkEndpointIds_.get(i));
+          .computeMessageSize(1, devices_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -19232,18 +20459,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Link)) {
+      if (!(obj instanceof context.ContextOuterClass.DeviceList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Link other = (context.ContextOuterClass.Link) obj;
+      context.ContextOuterClass.DeviceList other = (context.ContextOuterClass.DeviceList) obj;
 
-      if (hasLinkId() != other.hasLinkId()) return false;
-      if (hasLinkId()) {
-        if (!getLinkId()
-            .equals(other.getLinkId())) return false;
-      }
-      if (!getLinkEndpointIdsList()
-          .equals(other.getLinkEndpointIdsList())) return false;
+      if (!getDevicesList()
+          .equals(other.getDevicesList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -19255,82 +20477,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasLinkId()) {
-        hash = (37 * hash) + LINK_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getLinkId().hashCode();
-      }
-      if (getLinkEndpointIdsCount() > 0) {
-        hash = (37 * hash) + LINK_ENDPOINT_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getLinkEndpointIdsList().hashCode();
+      if (getDevicesCount() > 0) {
+        hash = (37 * hash) + DEVICES_FIELD_NUMBER;
+        hash = (53 * hash) + getDevicesList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Link parseFrom(
+    public static context.ContextOuterClass.DeviceList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Link parseFrom(
+    public static context.ContextOuterClass.DeviceList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Link parseFrom(
+    public static context.ContextOuterClass.DeviceList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Link parseFrom(
+    public static context.ContextOuterClass.DeviceList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Link parseFrom(byte[] data)
+    public static context.ContextOuterClass.DeviceList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Link parseFrom(
+    public static context.ContextOuterClass.DeviceList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Link parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.DeviceList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Link parseFrom(
+    public static context.ContextOuterClass.DeviceList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Link parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.DeviceList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Link parseDelimitedFrom(
+    public static context.ContextOuterClass.DeviceList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Link parseFrom(
+    public static context.ContextOuterClass.DeviceList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Link parseFrom(
+    public static context.ContextOuterClass.DeviceList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -19343,7 +20561,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Link prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.DeviceList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -19359,26 +20577,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Link}
+     * Protobuf type {@code context.DeviceList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Link)
-        context.ContextOuterClass.LinkOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.DeviceList)
+        context.ContextOuterClass.DeviceListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Link_descriptor;
+        return context.ContextOuterClass.internal_static_context_DeviceList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Link_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_DeviceList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Link.class, context.ContextOuterClass.Link.Builder.class);
+                context.ContextOuterClass.DeviceList.class, context.ContextOuterClass.DeviceList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Link.newBuilder()
+      // Construct using context.ContextOuterClass.DeviceList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -19391,23 +20609,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getLinkEndpointIdsFieldBuilder();
+          getDevicesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (linkIdBuilder_ == null) {
-          linkId_ = null;
-        } else {
-          linkId_ = null;
-          linkIdBuilder_ = null;
-        }
-        if (linkEndpointIdsBuilder_ == null) {
-          linkEndpointIds_ = java.util.Collections.emptyList();
+        if (devicesBuilder_ == null) {
+          devices_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          linkEndpointIdsBuilder_.clear();
+          devicesBuilder_.clear();
         }
         return this;
       }
@@ -19415,17 +20627,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Link_descriptor;
+        return context.ContextOuterClass.internal_static_context_DeviceList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Link getDefaultInstanceForType() {
-        return context.ContextOuterClass.Link.getDefaultInstance();
+      public context.ContextOuterClass.DeviceList getDefaultInstanceForType() {
+        return context.ContextOuterClass.DeviceList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Link build() {
-        context.ContextOuterClass.Link result = buildPartial();
+      public context.ContextOuterClass.DeviceList build() {
+        context.ContextOuterClass.DeviceList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -19433,22 +20645,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Link buildPartial() {
-        context.ContextOuterClass.Link result = new context.ContextOuterClass.Link(this);
+      public context.ContextOuterClass.DeviceList buildPartial() {
+        context.ContextOuterClass.DeviceList result = new context.ContextOuterClass.DeviceList(this);
         int from_bitField0_ = bitField0_;
-        if (linkIdBuilder_ == null) {
-          result.linkId_ = linkId_;
-        } else {
-          result.linkId_ = linkIdBuilder_.build();
-        }
-        if (linkEndpointIdsBuilder_ == null) {
+        if (devicesBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            linkEndpointIds_ = java.util.Collections.unmodifiableList(linkEndpointIds_);
+            devices_ = java.util.Collections.unmodifiableList(devices_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.linkEndpointIds_ = linkEndpointIds_;
+          result.devices_ = devices_;
         } else {
-          result.linkEndpointIds_ = linkEndpointIdsBuilder_.build();
+          result.devices_ = devicesBuilder_.build();
         }
         onBuilt();
         return result;
@@ -19488,42 +20695,39 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Link) {
-          return mergeFrom((context.ContextOuterClass.Link)other);
+        if (other instanceof context.ContextOuterClass.DeviceList) {
+          return mergeFrom((context.ContextOuterClass.DeviceList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Link other) {
-        if (other == context.ContextOuterClass.Link.getDefaultInstance()) return this;
-        if (other.hasLinkId()) {
-          mergeLinkId(other.getLinkId());
-        }
-        if (linkEndpointIdsBuilder_ == null) {
-          if (!other.linkEndpointIds_.isEmpty()) {
-            if (linkEndpointIds_.isEmpty()) {
-              linkEndpointIds_ = other.linkEndpointIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureLinkEndpointIdsIsMutable();
-              linkEndpointIds_.addAll(other.linkEndpointIds_);
-            }
+      public Builder mergeFrom(context.ContextOuterClass.DeviceList other) {
+        if (other == context.ContextOuterClass.DeviceList.getDefaultInstance()) return this;
+        if (devicesBuilder_ == null) {
+          if (!other.devices_.isEmpty()) {
+            if (devices_.isEmpty()) {
+              devices_ = other.devices_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureDevicesIsMutable();
+              devices_.addAll(other.devices_);
+            }
             onChanged();
           }
         } else {
-          if (!other.linkEndpointIds_.isEmpty()) {
-            if (linkEndpointIdsBuilder_.isEmpty()) {
-              linkEndpointIdsBuilder_.dispose();
-              linkEndpointIdsBuilder_ = null;
-              linkEndpointIds_ = other.linkEndpointIds_;
+          if (!other.devices_.isEmpty()) {
+            if (devicesBuilder_.isEmpty()) {
+              devicesBuilder_.dispose();
+              devicesBuilder_ = null;
+              devices_ = other.devices_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              linkEndpointIdsBuilder_ = 
+              devicesBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getLinkEndpointIdsFieldBuilder() : null;
+                   getDevicesFieldBuilder() : null;
             } else {
-              linkEndpointIdsBuilder_.addAllMessages(other.linkEndpointIds_);
+              devicesBuilder_.addAllMessages(other.devices_);
             }
           }
         }
@@ -19542,11 +20746,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Link parsedMessage = null;
+        context.ContextOuterClass.DeviceList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Link) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.DeviceList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -19557,363 +20761,244 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private context.ContextOuterClass.LinkId linkId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdBuilder_;
-      /**
-       * <code>.context.LinkId link_id = 1;</code>
-       * @return Whether the linkId field is set.
-       */
-      public boolean hasLinkId() {
-        return linkIdBuilder_ != null || linkId_ != null;
-      }
-      /**
-       * <code>.context.LinkId link_id = 1;</code>
-       * @return The linkId.
-       */
-      public context.ContextOuterClass.LinkId getLinkId() {
-        if (linkIdBuilder_ == null) {
-          return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
-        } else {
-          return linkIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.LinkId link_id = 1;</code>
-       */
-      public Builder setLinkId(context.ContextOuterClass.LinkId value) {
-        if (linkIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          linkId_ = value;
-          onChanged();
-        } else {
-          linkIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.LinkId link_id = 1;</code>
-       */
-      public Builder setLinkId(
-          context.ContextOuterClass.LinkId.Builder builderForValue) {
-        if (linkIdBuilder_ == null) {
-          linkId_ = builderForValue.build();
-          onChanged();
-        } else {
-          linkIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.LinkId link_id = 1;</code>
-       */
-      public Builder mergeLinkId(context.ContextOuterClass.LinkId value) {
-        if (linkIdBuilder_ == null) {
-          if (linkId_ != null) {
-            linkId_ =
-              context.ContextOuterClass.LinkId.newBuilder(linkId_).mergeFrom(value).buildPartial();
-          } else {
-            linkId_ = value;
-          }
-          onChanged();
-        } else {
-          linkIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.LinkId link_id = 1;</code>
-       */
-      public Builder clearLinkId() {
-        if (linkIdBuilder_ == null) {
-          linkId_ = null;
-          onChanged();
-        } else {
-          linkId_ = null;
-          linkIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.LinkId link_id = 1;</code>
-       */
-      public context.ContextOuterClass.LinkId.Builder getLinkIdBuilder() {
-        
-        onChanged();
-        return getLinkIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.LinkId link_id = 1;</code>
-       */
-      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
-        if (linkIdBuilder_ != null) {
-          return linkIdBuilder_.getMessageOrBuilder();
-        } else {
-          return linkId_ == null ?
-              context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
-        }
-      }
-      /**
-       * <code>.context.LinkId link_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
-          getLinkIdFieldBuilder() {
-        if (linkIdBuilder_ == null) {
-          linkIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
-                  getLinkId(),
-                  getParentForChildren(),
-                  isClean());
-          linkId_ = null;
-        }
-        return linkIdBuilder_;
-      }
-
-      private java.util.List<context.ContextOuterClass.EndPointId> linkEndpointIds_ =
+      private java.util.List<context.ContextOuterClass.Device> devices_ =
         java.util.Collections.emptyList();
-      private void ensureLinkEndpointIdsIsMutable() {
+      private void ensureDevicesIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          linkEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(linkEndpointIds_);
+          devices_ = new java.util.ArrayList<context.ContextOuterClass.Device>(devices_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> linkEndpointIdsBuilder_;
+          context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder> devicesBuilder_;
 
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.Device devices = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList() {
-        if (linkEndpointIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(linkEndpointIds_);
+      public java.util.List<context.ContextOuterClass.Device> getDevicesList() {
+        if (devicesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(devices_);
         } else {
-          return linkEndpointIdsBuilder_.getMessageList();
+          return devicesBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.Device devices = 1;</code>
        */
-      public int getLinkEndpointIdsCount() {
-        if (linkEndpointIdsBuilder_ == null) {
-          return linkEndpointIds_.size();
+      public int getDevicesCount() {
+        if (devicesBuilder_ == null) {
+          return devices_.size();
         } else {
-          return linkEndpointIdsBuilder_.getCount();
+          return devicesBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.Device devices = 1;</code>
        */
-      public context.ContextOuterClass.EndPointId getLinkEndpointIds(int index) {
-        if (linkEndpointIdsBuilder_ == null) {
-          return linkEndpointIds_.get(index);
+      public context.ContextOuterClass.Device getDevices(int index) {
+        if (devicesBuilder_ == null) {
+          return devices_.get(index);
         } else {
-          return linkEndpointIdsBuilder_.getMessage(index);
+          return devicesBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.Device devices = 1;</code>
        */
-      public Builder setLinkEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (linkEndpointIdsBuilder_ == null) {
+      public Builder setDevices(
+          int index, context.ContextOuterClass.Device value) {
+        if (devicesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureLinkEndpointIdsIsMutable();
-          linkEndpointIds_.set(index, value);
+          ensureDevicesIsMutable();
+          devices_.set(index, value);
           onChanged();
         } else {
-          linkEndpointIdsBuilder_.setMessage(index, value);
+          devicesBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.Device devices = 1;</code>
        */
-      public Builder setLinkEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (linkEndpointIdsBuilder_ == null) {
-          ensureLinkEndpointIdsIsMutable();
-          linkEndpointIds_.set(index, builderForValue.build());
+      public Builder setDevices(
+          int index, context.ContextOuterClass.Device.Builder builderForValue) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
+          devices_.set(index, builderForValue.build());
           onChanged();
         } else {
-          linkEndpointIdsBuilder_.setMessage(index, builderForValue.build());
+          devicesBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.Device devices = 1;</code>
        */
-      public Builder addLinkEndpointIds(context.ContextOuterClass.EndPointId value) {
-        if (linkEndpointIdsBuilder_ == null) {
+      public Builder addDevices(context.ContextOuterClass.Device value) {
+        if (devicesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureLinkEndpointIdsIsMutable();
-          linkEndpointIds_.add(value);
+          ensureDevicesIsMutable();
+          devices_.add(value);
           onChanged();
         } else {
-          linkEndpointIdsBuilder_.addMessage(value);
+          devicesBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.Device devices = 1;</code>
        */
-      public Builder addLinkEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (linkEndpointIdsBuilder_ == null) {
+      public Builder addDevices(
+          int index, context.ContextOuterClass.Device value) {
+        if (devicesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureLinkEndpointIdsIsMutable();
-          linkEndpointIds_.add(index, value);
+          ensureDevicesIsMutable();
+          devices_.add(index, value);
           onChanged();
         } else {
-          linkEndpointIdsBuilder_.addMessage(index, value);
+          devicesBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.Device devices = 1;</code>
        */
-      public Builder addLinkEndpointIds(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (linkEndpointIdsBuilder_ == null) {
-          ensureLinkEndpointIdsIsMutable();
-          linkEndpointIds_.add(builderForValue.build());
+      public Builder addDevices(
+          context.ContextOuterClass.Device.Builder builderForValue) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
+          devices_.add(builderForValue.build());
           onChanged();
         } else {
-          linkEndpointIdsBuilder_.addMessage(builderForValue.build());
+          devicesBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.Device devices = 1;</code>
        */
-      public Builder addLinkEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (linkEndpointIdsBuilder_ == null) {
-          ensureLinkEndpointIdsIsMutable();
-          linkEndpointIds_.add(index, builderForValue.build());
+      public Builder addDevices(
+          int index, context.ContextOuterClass.Device.Builder builderForValue) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
+          devices_.add(index, builderForValue.build());
           onChanged();
         } else {
-          linkEndpointIdsBuilder_.addMessage(index, builderForValue.build());
+          devicesBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.Device devices = 1;</code>
        */
-      public Builder addAllLinkEndpointIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
-        if (linkEndpointIdsBuilder_ == null) {
-          ensureLinkEndpointIdsIsMutable();
+      public Builder addAllDevices(
+          java.lang.Iterable<? extends context.ContextOuterClass.Device> values) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, linkEndpointIds_);
+              values, devices_);
           onChanged();
         } else {
-          linkEndpointIdsBuilder_.addAllMessages(values);
+          devicesBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.Device devices = 1;</code>
        */
-      public Builder clearLinkEndpointIds() {
-        if (linkEndpointIdsBuilder_ == null) {
-          linkEndpointIds_ = java.util.Collections.emptyList();
+      public Builder clearDevices() {
+        if (devicesBuilder_ == null) {
+          devices_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          linkEndpointIdsBuilder_.clear();
+          devicesBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.Device devices = 1;</code>
        */
-      public Builder removeLinkEndpointIds(int index) {
-        if (linkEndpointIdsBuilder_ == null) {
-          ensureLinkEndpointIdsIsMutable();
-          linkEndpointIds_.remove(index);
+      public Builder removeDevices(int index) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
+          devices_.remove(index);
           onChanged();
         } else {
-          linkEndpointIdsBuilder_.remove(index);
+          devicesBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.Device devices = 1;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder getLinkEndpointIdsBuilder(
+      public context.ContextOuterClass.Device.Builder getDevicesBuilder(
           int index) {
-        return getLinkEndpointIdsFieldBuilder().getBuilder(index);
+        return getDevicesFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.Device devices = 1;</code>
        */
-      public context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(
+      public context.ContextOuterClass.DeviceOrBuilder getDevicesOrBuilder(
           int index) {
-        if (linkEndpointIdsBuilder_ == null) {
-          return linkEndpointIds_.get(index);  } else {
-          return linkEndpointIdsBuilder_.getMessageOrBuilder(index);
+        if (devicesBuilder_ == null) {
+          return devices_.get(index);  } else {
+          return devicesBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.Device devices = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-           getLinkEndpointIdsOrBuilderList() {
-        if (linkEndpointIdsBuilder_ != null) {
-          return linkEndpointIdsBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.DeviceOrBuilder> 
+           getDevicesOrBuilderList() {
+        if (devicesBuilder_ != null) {
+          return devicesBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(linkEndpointIds_);
+          return java.util.Collections.unmodifiableList(devices_);
         }
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.Device devices = 1;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder addLinkEndpointIdsBuilder() {
-        return getLinkEndpointIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      public context.ContextOuterClass.Device.Builder addDevicesBuilder() {
+        return getDevicesFieldBuilder().addBuilder(
+            context.ContextOuterClass.Device.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.Device devices = 1;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder addLinkEndpointIdsBuilder(
+      public context.ContextOuterClass.Device.Builder addDevicesBuilder(
           int index) {
-        return getLinkEndpointIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+        return getDevicesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Device.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.Device devices = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
-           getLinkEndpointIdsBuilderList() {
-        return getLinkEndpointIdsFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.Device.Builder> 
+           getDevicesBuilderList() {
+        return getDevicesFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getLinkEndpointIdsFieldBuilder() {
-        if (linkEndpointIdsBuilder_ == null) {
-          linkEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  linkEndpointIds_,
+          context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder> 
+          getDevicesFieldBuilder() {
+        if (devicesBuilder_ == null) {
+          devicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder>(
+                  devices_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          linkEndpointIds_ = null;
+          devices_ = null;
         }
-        return linkEndpointIdsBuilder_;
+        return devicesBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -19928,95 +21013,103 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Link)
+      // @@protoc_insertion_point(builder_scope:context.DeviceList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Link)
-    private static final context.ContextOuterClass.Link DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.DeviceList)
+    private static final context.ContextOuterClass.DeviceList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Link();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceList();
     }
 
-    public static context.ContextOuterClass.Link getDefaultInstance() {
+    public static context.ContextOuterClass.DeviceList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Link>
-        PARSER = new com.google.protobuf.AbstractParser<Link>() {
+    private static final com.google.protobuf.Parser<DeviceList>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceList>() {
       @java.lang.Override
-      public Link parsePartialFrom(
+      public DeviceList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Link(input, extensionRegistry);
+        return new DeviceList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Link> parser() {
+    public static com.google.protobuf.Parser<DeviceList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Link> getParserForType() {
+    public com.google.protobuf.Parser<DeviceList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Link getDefaultInstanceForType() {
+    public context.ContextOuterClass.DeviceList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface LinkIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.LinkIdList)
+  public interface DeviceFilterOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.DeviceFilter)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>.context.DeviceIdList device_ids = 1;</code>
+     * @return Whether the deviceIds field is set.
      */
-    java.util.List<context.ContextOuterClass.LinkId> 
-        getLinkIdsList();
+    boolean hasDeviceIds();
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>.context.DeviceIdList device_ids = 1;</code>
+     * @return The deviceIds.
      */
-    context.ContextOuterClass.LinkId getLinkIds(int index);
+    context.ContextOuterClass.DeviceIdList getDeviceIds();
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>.context.DeviceIdList device_ids = 1;</code>
      */
-    int getLinkIdsCount();
+    context.ContextOuterClass.DeviceIdListOrBuilder getDeviceIdsOrBuilder();
+
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>bool include_endpoints = 2;</code>
+     * @return The includeEndpoints.
      */
-    java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
-        getLinkIdsOrBuilderList();
+    boolean getIncludeEndpoints();
+
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>bool include_config_rules = 3;</code>
+     * @return The includeConfigRules.
      */
-    context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
-        int index);
+    boolean getIncludeConfigRules();
+
+    /**
+     * <code>bool include_components = 4;</code>
+     * @return The includeComponents.
+     */
+    boolean getIncludeComponents();
   }
   /**
-   * Protobuf type {@code context.LinkIdList}
+   * Protobuf type {@code context.DeviceFilter}
    */
-  public static final class LinkIdList extends
+  public static final class DeviceFilter extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.LinkIdList)
-      LinkIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.DeviceFilter)
+      DeviceFilterOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use LinkIdList.newBuilder() to construct.
-    private LinkIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use DeviceFilter.newBuilder() to construct.
+    private DeviceFilter(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private LinkIdList() {
-      linkIds_ = java.util.Collections.emptyList();
+    private DeviceFilter() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new LinkIdList();
+      return new DeviceFilter();
     }
 
     @java.lang.Override
@@ -20024,7 +21117,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private LinkIdList(
+    private DeviceFilter(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -20032,7 +21125,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -20044,12 +21136,31 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>();
-                mutable_bitField0_ |= 0x00000001;
+              context.ContextOuterClass.DeviceIdList.Builder subBuilder = null;
+              if (deviceIds_ != null) {
+                subBuilder = deviceIds_.toBuilder();
               }
-              linkIds_.add(
-                  input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry));
+              deviceIds_ = input.readMessage(context.ContextOuterClass.DeviceIdList.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(deviceIds_);
+                deviceIds_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 16: {
+
+              includeEndpoints_ = input.readBool();
+              break;
+            }
+            case 24: {
+
+              includeConfigRules_ = input.readBool();
+              break;
+            }
+            case 32: {
+
+              includeComponents_ = input.readBool();
               break;
             }
             default: {
@@ -20067,64 +21178,80 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_LinkIdList_descriptor;
+      return context.ContextOuterClass.internal_static_context_DeviceFilter_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_LinkIdList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_DeviceFilter_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.LinkIdList.class, context.ContextOuterClass.LinkIdList.Builder.class);
+              context.ContextOuterClass.DeviceFilter.class, context.ContextOuterClass.DeviceFilter.Builder.class);
     }
 
-    public static final int LINK_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.LinkId> linkIds_;
+    public static final int DEVICE_IDS_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.DeviceIdList deviceIds_;
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>.context.DeviceIdList device_ids = 1;</code>
+     * @return Whether the deviceIds field is set.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
-      return linkIds_;
+    public boolean hasDeviceIds() {
+      return deviceIds_ != null;
     }
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>.context.DeviceIdList device_ids = 1;</code>
+     * @return The deviceIds.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
-        getLinkIdsOrBuilderList() {
-      return linkIds_;
+    public context.ContextOuterClass.DeviceIdList getDeviceIds() {
+      return deviceIds_ == null ? context.ContextOuterClass.DeviceIdList.getDefaultInstance() : deviceIds_;
     }
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>.context.DeviceIdList device_ids = 1;</code>
      */
     @java.lang.Override
-    public int getLinkIdsCount() {
-      return linkIds_.size();
+    public context.ContextOuterClass.DeviceIdListOrBuilder getDeviceIdsOrBuilder() {
+      return getDeviceIds();
     }
+
+    public static final int INCLUDE_ENDPOINTS_FIELD_NUMBER = 2;
+    private boolean includeEndpoints_;
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>bool include_endpoints = 2;</code>
+     * @return The includeEndpoints.
      */
     @java.lang.Override
-    public context.ContextOuterClass.LinkId getLinkIds(int index) {
-      return linkIds_.get(index);
+    public boolean getIncludeEndpoints() {
+      return includeEndpoints_;
     }
+
+    public static final int INCLUDE_CONFIG_RULES_FIELD_NUMBER = 3;
+    private boolean includeConfigRules_;
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>bool include_config_rules = 3;</code>
+     * @return The includeConfigRules.
      */
     @java.lang.Override
-    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
-        int index) {
-      return linkIds_.get(index);
+    public boolean getIncludeConfigRules() {
+      return includeConfigRules_;
+    }
+
+    public static final int INCLUDE_COMPONENTS_FIELD_NUMBER = 4;
+    private boolean includeComponents_;
+    /**
+     * <code>bool include_components = 4;</code>
+     * @return The includeComponents.
+     */
+    @java.lang.Override
+    public boolean getIncludeComponents() {
+      return includeComponents_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -20141,8 +21268,17 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < linkIds_.size(); i++) {
-        output.writeMessage(1, linkIds_.get(i));
+      if (deviceIds_ != null) {
+        output.writeMessage(1, getDeviceIds());
+      }
+      if (includeEndpoints_ != false) {
+        output.writeBool(2, includeEndpoints_);
+      }
+      if (includeConfigRules_ != false) {
+        output.writeBool(3, includeConfigRules_);
+      }
+      if (includeComponents_ != false) {
+        output.writeBool(4, includeComponents_);
       }
       unknownFields.writeTo(output);
     }
@@ -20153,9 +21289,21 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < linkIds_.size(); i++) {
+      if (deviceIds_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, linkIds_.get(i));
+          .computeMessageSize(1, getDeviceIds());
+      }
+      if (includeEndpoints_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(2, includeEndpoints_);
+      }
+      if (includeConfigRules_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(3, includeConfigRules_);
+      }
+      if (includeComponents_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(4, includeComponents_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -20167,13 +21315,22 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.LinkIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.DeviceFilter)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.LinkIdList other = (context.ContextOuterClass.LinkIdList) obj;
+      context.ContextOuterClass.DeviceFilter other = (context.ContextOuterClass.DeviceFilter) obj;
 
-      if (!getLinkIdsList()
-          .equals(other.getLinkIdsList())) return false;
+      if (hasDeviceIds() != other.hasDeviceIds()) return false;
+      if (hasDeviceIds()) {
+        if (!getDeviceIds()
+            .equals(other.getDeviceIds())) return false;
+      }
+      if (getIncludeEndpoints()
+          != other.getIncludeEndpoints()) return false;
+      if (getIncludeConfigRules()
+          != other.getIncludeConfigRules()) return false;
+      if (getIncludeComponents()
+          != other.getIncludeComponents()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -20185,78 +21342,87 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getLinkIdsCount() > 0) {
-        hash = (37 * hash) + LINK_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getLinkIdsList().hashCode();
+      if (hasDeviceIds()) {
+        hash = (37 * hash) + DEVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceIds().hashCode();
       }
+      hash = (37 * hash) + INCLUDE_ENDPOINTS_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getIncludeEndpoints());
+      hash = (37 * hash) + INCLUDE_CONFIG_RULES_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getIncludeConfigRules());
+      hash = (37 * hash) + INCLUDE_COMPONENTS_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getIncludeComponents());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.LinkIdList parseFrom(
+    public static context.ContextOuterClass.DeviceFilter parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(
+    public static context.ContextOuterClass.DeviceFilter parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(
+    public static context.ContextOuterClass.DeviceFilter parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(
+    public static context.ContextOuterClass.DeviceFilter parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(byte[] data)
+    public static context.ContextOuterClass.DeviceFilter parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(
+    public static context.ContextOuterClass.DeviceFilter parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.DeviceFilter parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(
+    public static context.ContextOuterClass.DeviceFilter parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkIdList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.DeviceFilter parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkIdList parseDelimitedFrom(
+    public static context.ContextOuterClass.DeviceFilter parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(
+    public static context.ContextOuterClass.DeviceFilter parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(
+    public static context.ContextOuterClass.DeviceFilter parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -20269,7 +21435,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.LinkIdList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.DeviceFilter prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -20285,26 +21451,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.LinkIdList}
+     * Protobuf type {@code context.DeviceFilter}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.LinkIdList)
-        context.ContextOuterClass.LinkIdListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.DeviceFilter)
+        context.ContextOuterClass.DeviceFilterOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_LinkIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_DeviceFilter_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_LinkIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_DeviceFilter_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.LinkIdList.class, context.ContextOuterClass.LinkIdList.Builder.class);
+                context.ContextOuterClass.DeviceFilter.class, context.ContextOuterClass.DeviceFilter.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.LinkIdList.newBuilder()
+      // Construct using context.ContextOuterClass.DeviceFilter.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -20317,35 +21483,40 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getLinkIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (linkIdsBuilder_ == null) {
-          linkIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (deviceIdsBuilder_ == null) {
+          deviceIds_ = null;
         } else {
-          linkIdsBuilder_.clear();
+          deviceIds_ = null;
+          deviceIdsBuilder_ = null;
         }
+        includeEndpoints_ = false;
+
+        includeConfigRules_ = false;
+
+        includeComponents_ = false;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_LinkIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_DeviceFilter_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.LinkIdList.getDefaultInstance();
+      public context.ContextOuterClass.DeviceFilter getDefaultInstanceForType() {
+        return context.ContextOuterClass.DeviceFilter.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkIdList build() {
-        context.ContextOuterClass.LinkIdList result = buildPartial();
+      public context.ContextOuterClass.DeviceFilter build() {
+        context.ContextOuterClass.DeviceFilter result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -20353,18 +21524,16 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkIdList buildPartial() {
-        context.ContextOuterClass.LinkIdList result = new context.ContextOuterClass.LinkIdList(this);
-        int from_bitField0_ = bitField0_;
-        if (linkIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.linkIds_ = linkIds_;
+      public context.ContextOuterClass.DeviceFilter buildPartial() {
+        context.ContextOuterClass.DeviceFilter result = new context.ContextOuterClass.DeviceFilter(this);
+        if (deviceIdsBuilder_ == null) {
+          result.deviceIds_ = deviceIds_;
         } else {
-          result.linkIds_ = linkIdsBuilder_.build();
+          result.deviceIds_ = deviceIdsBuilder_.build();
         }
+        result.includeEndpoints_ = includeEndpoints_;
+        result.includeConfigRules_ = includeConfigRules_;
+        result.includeComponents_ = includeComponents_;
         onBuilt();
         return result;
       }
@@ -20403,41 +21572,27 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.LinkIdList) {
-          return mergeFrom((context.ContextOuterClass.LinkIdList)other);
+        if (other instanceof context.ContextOuterClass.DeviceFilter) {
+          return mergeFrom((context.ContextOuterClass.DeviceFilter)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.LinkIdList other) {
-        if (other == context.ContextOuterClass.LinkIdList.getDefaultInstance()) return this;
-        if (linkIdsBuilder_ == null) {
-          if (!other.linkIds_.isEmpty()) {
-            if (linkIds_.isEmpty()) {
-              linkIds_ = other.linkIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureLinkIdsIsMutable();
-              linkIds_.addAll(other.linkIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.linkIds_.isEmpty()) {
-            if (linkIdsBuilder_.isEmpty()) {
-              linkIdsBuilder_.dispose();
-              linkIdsBuilder_ = null;
-              linkIds_ = other.linkIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              linkIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getLinkIdsFieldBuilder() : null;
-            } else {
-              linkIdsBuilder_.addAllMessages(other.linkIds_);
-            }
-          }
+      public Builder mergeFrom(context.ContextOuterClass.DeviceFilter other) {
+        if (other == context.ContextOuterClass.DeviceFilter.getDefaultInstance()) return this;
+        if (other.hasDeviceIds()) {
+          mergeDeviceIds(other.getDeviceIds());
+        }
+        if (other.getIncludeEndpoints() != false) {
+          setIncludeEndpoints(other.getIncludeEndpoints());
+        }
+        if (other.getIncludeConfigRules() != false) {
+          setIncludeConfigRules(other.getIncludeConfigRules());
+        }
+        if (other.getIncludeComponents() != false) {
+          setIncludeComponents(other.getIncludeComponents());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -20454,11 +21609,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.LinkIdList parsedMessage = null;
+        context.ContextOuterClass.DeviceFilter parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.LinkIdList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.DeviceFilter) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -20467,246 +21622,217 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.LinkId> linkIds_ =
-        java.util.Collections.emptyList();
-      private void ensureLinkIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>(linkIds_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdsBuilder_;
 
+      private context.ContextOuterClass.DeviceIdList deviceIds_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceIdList, context.ContextOuterClass.DeviceIdList.Builder, context.ContextOuterClass.DeviceIdListOrBuilder> deviceIdsBuilder_;
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
-        if (linkIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(linkIds_);
-        } else {
-          return linkIdsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>.context.DeviceIdList device_ids = 1;</code>
+       * @return Whether the deviceIds field is set.
        */
-      public int getLinkIdsCount() {
-        if (linkIdsBuilder_ == null) {
-          return linkIds_.size();
-        } else {
-          return linkIdsBuilder_.getCount();
-        }
+      public boolean hasDeviceIds() {
+        return deviceIdsBuilder_ != null || deviceIds_ != null;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>.context.DeviceIdList device_ids = 1;</code>
+       * @return The deviceIds.
        */
-      public context.ContextOuterClass.LinkId getLinkIds(int index) {
-        if (linkIdsBuilder_ == null) {
-          return linkIds_.get(index);
+      public context.ContextOuterClass.DeviceIdList getDeviceIds() {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_ == null ? context.ContextOuterClass.DeviceIdList.getDefaultInstance() : deviceIds_;
         } else {
-          return linkIdsBuilder_.getMessage(index);
+          return deviceIdsBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>.context.DeviceIdList device_ids = 1;</code>
        */
-      public Builder setLinkIds(
-          int index, context.ContextOuterClass.LinkId value) {
-        if (linkIdsBuilder_ == null) {
+      public Builder setDeviceIds(context.ContextOuterClass.DeviceIdList value) {
+        if (deviceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureLinkIdsIsMutable();
-          linkIds_.set(index, value);
+          deviceIds_ = value;
           onChanged();
         } else {
-          linkIdsBuilder_.setMessage(index, value);
+          deviceIdsBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>.context.DeviceIdList device_ids = 1;</code>
        */
-      public Builder setLinkIds(
-          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
-          linkIds_.set(index, builderForValue.build());
+      public Builder setDeviceIds(
+          context.ContextOuterClass.DeviceIdList.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          deviceIds_ = builderForValue.build();
           onChanged();
         } else {
-          linkIdsBuilder_.setMessage(index, builderForValue.build());
+          deviceIdsBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>.context.DeviceIdList device_ids = 1;</code>
        */
-      public Builder addLinkIds(context.ContextOuterClass.LinkId value) {
-        if (linkIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeDeviceIds(context.ContextOuterClass.DeviceIdList value) {
+        if (deviceIdsBuilder_ == null) {
+          if (deviceIds_ != null) {
+            deviceIds_ =
+              context.ContextOuterClass.DeviceIdList.newBuilder(deviceIds_).mergeFrom(value).buildPartial();
+          } else {
+            deviceIds_ = value;
           }
-          ensureLinkIdsIsMutable();
-          linkIds_.add(value);
           onChanged();
         } else {
-          linkIdsBuilder_.addMessage(value);
+          deviceIdsBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>.context.DeviceIdList device_ids = 1;</code>
        */
-      public Builder addLinkIds(
-          int index, context.ContextOuterClass.LinkId value) {
-        if (linkIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureLinkIdsIsMutable();
-          linkIds_.add(index, value);
+      public Builder clearDeviceIds() {
+        if (deviceIdsBuilder_ == null) {
+          deviceIds_ = null;
           onChanged();
         } else {
-          linkIdsBuilder_.addMessage(index, value);
+          deviceIds_ = null;
+          deviceIdsBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>.context.DeviceIdList device_ids = 1;</code>
        */
-      public Builder addLinkIds(
-          context.ContextOuterClass.LinkId.Builder builderForValue) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
-          linkIds_.add(builderForValue.build());
-          onChanged();
-        } else {
-          linkIdsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
+      public context.ContextOuterClass.DeviceIdList.Builder getDeviceIdsBuilder() {
+        
+        onChanged();
+        return getDeviceIdsFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>.context.DeviceIdList device_ids = 1;</code>
        */
-      public Builder addLinkIds(
-          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
-          linkIds_.add(index, builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.DeviceIdListOrBuilder getDeviceIdsOrBuilder() {
+        if (deviceIdsBuilder_ != null) {
+          return deviceIdsBuilder_.getMessageOrBuilder();
         } else {
-          linkIdsBuilder_.addMessage(index, builderForValue.build());
+          return deviceIds_ == null ?
+              context.ContextOuterClass.DeviceIdList.getDefaultInstance() : deviceIds_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>.context.DeviceIdList device_ids = 1;</code>
        */
-      public Builder addAllLinkIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.LinkId> values) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, linkIds_);
-          onChanged();
-        } else {
-          linkIdsBuilder_.addAllMessages(values);
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceIdList, context.ContextOuterClass.DeviceIdList.Builder, context.ContextOuterClass.DeviceIdListOrBuilder> 
+          getDeviceIdsFieldBuilder() {
+        if (deviceIdsBuilder_ == null) {
+          deviceIdsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceIdList, context.ContextOuterClass.DeviceIdList.Builder, context.ContextOuterClass.DeviceIdListOrBuilder>(
+                  getDeviceIds(),
+                  getParentForChildren(),
+                  isClean());
+          deviceIds_ = null;
         }
-        return this;
+        return deviceIdsBuilder_;
       }
+
+      private boolean includeEndpoints_ ;
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>bool include_endpoints = 2;</code>
+       * @return The includeEndpoints.
        */
-      public Builder clearLinkIds() {
-        if (linkIdsBuilder_ == null) {
-          linkIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          linkIdsBuilder_.clear();
-        }
-        return this;
+      @java.lang.Override
+      public boolean getIncludeEndpoints() {
+        return includeEndpoints_;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>bool include_endpoints = 2;</code>
+       * @param value The includeEndpoints to set.
+       * @return This builder for chaining.
        */
-      public Builder removeLinkIds(int index) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
-          linkIds_.remove(index);
-          onChanged();
-        } else {
-          linkIdsBuilder_.remove(index);
-        }
+      public Builder setIncludeEndpoints(boolean value) {
+        
+        includeEndpoints_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>bool include_endpoints = 2;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.LinkId.Builder getLinkIdsBuilder(
-          int index) {
-        return getLinkIdsFieldBuilder().getBuilder(index);
+      public Builder clearIncludeEndpoints() {
+        
+        includeEndpoints_ = false;
+        onChanged();
+        return this;
       }
+
+      private boolean includeConfigRules_ ;
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>bool include_config_rules = 3;</code>
+       * @return The includeConfigRules.
        */
-      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
-          int index) {
-        if (linkIdsBuilder_ == null) {
-          return linkIds_.get(index);  } else {
-          return linkIdsBuilder_.getMessageOrBuilder(index);
-        }
+      @java.lang.Override
+      public boolean getIncludeConfigRules() {
+        return includeConfigRules_;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>bool include_config_rules = 3;</code>
+       * @param value The includeConfigRules to set.
+       * @return This builder for chaining.
        */
-      public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
-           getLinkIdsOrBuilderList() {
-        if (linkIdsBuilder_ != null) {
-          return linkIdsBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(linkIds_);
-        }
+      public Builder setIncludeConfigRules(boolean value) {
+        
+        includeConfigRules_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>bool include_config_rules = 3;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder() {
-        return getLinkIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.LinkId.getDefaultInstance());
+      public Builder clearIncludeConfigRules() {
+        
+        includeConfigRules_ = false;
+        onChanged();
+        return this;
       }
+
+      private boolean includeComponents_ ;
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>bool include_components = 4;</code>
+       * @return The includeComponents.
        */
-      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder(
-          int index) {
-        return getLinkIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.LinkId.getDefaultInstance());
+      @java.lang.Override
+      public boolean getIncludeComponents() {
+        return includeComponents_;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>bool include_components = 4;</code>
+       * @param value The includeComponents to set.
+       * @return This builder for chaining.
        */
-      public java.util.List<context.ContextOuterClass.LinkId.Builder> 
-           getLinkIdsBuilderList() {
-        return getLinkIdsFieldBuilder().getBuilderList();
+      public Builder setIncludeComponents(boolean value) {
+        
+        includeComponents_ = value;
+        onChanged();
+        return this;
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
-          getLinkIdsFieldBuilder() {
-        if (linkIdsBuilder_ == null) {
-          linkIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
-                  linkIds_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          linkIds_ = null;
-        }
-        return linkIdsBuilder_;
+      /**
+       * <code>bool include_components = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIncludeComponents() {
+        
+        includeComponents_ = false;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -20721,95 +21847,115 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.LinkIdList)
+      // @@protoc_insertion_point(builder_scope:context.DeviceFilter)
     }
 
-    // @@protoc_insertion_point(class_scope:context.LinkIdList)
-    private static final context.ContextOuterClass.LinkIdList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.DeviceFilter)
+    private static final context.ContextOuterClass.DeviceFilter DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkIdList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceFilter();
     }
 
-    public static context.ContextOuterClass.LinkIdList getDefaultInstance() {
+    public static context.ContextOuterClass.DeviceFilter getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<LinkIdList>
-        PARSER = new com.google.protobuf.AbstractParser<LinkIdList>() {
+    private static final com.google.protobuf.Parser<DeviceFilter>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceFilter>() {
       @java.lang.Override
-      public LinkIdList parsePartialFrom(
+      public DeviceFilter parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new LinkIdList(input, extensionRegistry);
+        return new DeviceFilter(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<LinkIdList> parser() {
+    public static com.google.protobuf.Parser<DeviceFilter> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<LinkIdList> getParserForType() {
+    public com.google.protobuf.Parser<DeviceFilter> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.LinkIdList getDefaultInstanceForType() {
+    public context.ContextOuterClass.DeviceFilter getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface LinkListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.LinkList)
+  public interface DeviceEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.DeviceEvent)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.Link links = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
-    java.util.List<context.ContextOuterClass.Link> 
-        getLinksList();
+    boolean hasEvent();
     /**
-     * <code>repeated .context.Link links = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
-    context.ContextOuterClass.Link getLinks(int index);
+    context.ContextOuterClass.Event getEvent();
     /**
-     * <code>repeated .context.Link links = 1;</code>
+     * <code>.context.Event event = 1;</code>
      */
-    int getLinksCount();
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
     /**
-     * <code>repeated .context.Link links = 1;</code>
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return Whether the deviceId field is set.
      */
-    java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
-        getLinksOrBuilderList();
+    boolean hasDeviceId();
     /**
-     * <code>repeated .context.Link links = 1;</code>
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return The deviceId.
      */
-    context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
-        int index);
+    context.ContextOuterClass.DeviceId getDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+
+    /**
+     * <code>.context.DeviceConfig device_config = 3;</code>
+     * @return Whether the deviceConfig field is set.
+     */
+    boolean hasDeviceConfig();
+    /**
+     * <code>.context.DeviceConfig device_config = 3;</code>
+     * @return The deviceConfig.
+     */
+    context.ContextOuterClass.DeviceConfig getDeviceConfig();
+    /**
+     * <code>.context.DeviceConfig device_config = 3;</code>
+     */
+    context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder();
   }
   /**
-   * Protobuf type {@code context.LinkList}
+   * Protobuf type {@code context.DeviceEvent}
    */
-  public static final class LinkList extends
+  public static final class DeviceEvent extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.LinkList)
-      LinkListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.DeviceEvent)
+      DeviceEventOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use LinkList.newBuilder() to construct.
-    private LinkList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use DeviceEvent.newBuilder() to construct.
+    private DeviceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private LinkList() {
-      links_ = java.util.Collections.emptyList();
+    private DeviceEvent() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new LinkList();
+      return new DeviceEvent();
     }
 
     @java.lang.Override
@@ -20817,7 +21963,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private LinkList(
+    private DeviceEvent(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -20825,7 +21971,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -20837,12 +21982,42 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                links_ = new java.util.ArrayList<context.ContextOuterClass.Link>();
-                mutable_bitField0_ |= 0x00000001;
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
               }
-              links_.add(
-                  input.readMessage(context.ContextOuterClass.Link.parser(), extensionRegistry));
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
+              if (deviceId_ != null) {
+                subBuilder = deviceId_.toBuilder();
+              }
+              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(deviceId_);
+                deviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 26: {
+              context.ContextOuterClass.DeviceConfig.Builder subBuilder = null;
+              if (deviceConfig_ != null) {
+                subBuilder = deviceConfig_.toBuilder();
+              }
+              deviceConfig_ = input.readMessage(context.ContextOuterClass.DeviceConfig.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(deviceConfig_);
+                deviceConfig_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -20860,64 +22035,99 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          links_ = java.util.Collections.unmodifiableList(links_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_LinkList_descriptor;
+      return context.ContextOuterClass.internal_static_context_DeviceEvent_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_LinkList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_DeviceEvent_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.LinkList.class, context.ContextOuterClass.LinkList.Builder.class);
+              context.ContextOuterClass.DeviceEvent.class, context.ContextOuterClass.DeviceEvent.Builder.class);
     }
 
-    public static final int LINKS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Link> links_;
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
     /**
-     * <code>repeated .context.Link links = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Link> getLinksList() {
-      return links_;
+    public boolean hasEvent() {
+      return event_ != null;
     }
     /**
-     * <code>repeated .context.Link links = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
-        getLinksOrBuilderList() {
-      return links_;
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
     }
     /**
-     * <code>repeated .context.Link links = 1;</code>
+     * <code>.context.Event event = 1;</code>
      */
     @java.lang.Override
-    public int getLinksCount() {
-      return links_.size();
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
     }
+
+    public static final int DEVICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.DeviceId deviceId_;
     /**
-     * <code>repeated .context.Link links = 1;</code>
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return Whether the deviceId field is set.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Link getLinks(int index) {
-      return links_.get(index);
+    public boolean hasDeviceId() {
+      return deviceId_ != null;
     }
     /**
-     * <code>repeated .context.Link links = 1;</code>
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return The deviceId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
-        int index) {
-      return links_.get(index);
+    public context.ContextOuterClass.DeviceId getDeviceId() {
+      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+      return getDeviceId();
+    }
+
+    public static final int DEVICE_CONFIG_FIELD_NUMBER = 3;
+    private context.ContextOuterClass.DeviceConfig deviceConfig_;
+    /**
+     * <code>.context.DeviceConfig device_config = 3;</code>
+     * @return Whether the deviceConfig field is set.
+     */
+    @java.lang.Override
+    public boolean hasDeviceConfig() {
+      return deviceConfig_ != null;
+    }
+    /**
+     * <code>.context.DeviceConfig device_config = 3;</code>
+     * @return The deviceConfig.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceConfig getDeviceConfig() {
+      return deviceConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
+    }
+    /**
+     * <code>.context.DeviceConfig device_config = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder() {
+      return getDeviceConfig();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -20934,8 +22144,14 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < links_.size(); i++) {
-        output.writeMessage(1, links_.get(i));
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (deviceId_ != null) {
+        output.writeMessage(2, getDeviceId());
+      }
+      if (deviceConfig_ != null) {
+        output.writeMessage(3, getDeviceConfig());
       }
       unknownFields.writeTo(output);
     }
@@ -20946,9 +22162,17 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < links_.size(); i++) {
+      if (event_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, links_.get(i));
+          .computeMessageSize(1, getEvent());
+      }
+      if (deviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getDeviceId());
+      }
+      if (deviceConfig_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getDeviceConfig());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -20960,13 +22184,26 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.LinkList)) {
+      if (!(obj instanceof context.ContextOuterClass.DeviceEvent)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.LinkList other = (context.ContextOuterClass.LinkList) obj;
+      context.ContextOuterClass.DeviceEvent other = (context.ContextOuterClass.DeviceEvent) obj;
 
-      if (!getLinksList()
-          .equals(other.getLinksList())) return false;
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasDeviceId() != other.hasDeviceId()) return false;
+      if (hasDeviceId()) {
+        if (!getDeviceId()
+            .equals(other.getDeviceId())) return false;
+      }
+      if (hasDeviceConfig() != other.hasDeviceConfig()) return false;
+      if (hasDeviceConfig()) {
+        if (!getDeviceConfig()
+            .equals(other.getDeviceConfig())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -20978,78 +22215,86 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getLinksCount() > 0) {
-        hash = (37 * hash) + LINKS_FIELD_NUMBER;
-        hash = (53 * hash) + getLinksList().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (hasDeviceId()) {
+        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceId().hashCode();
+      }
+      if (hasDeviceConfig()) {
+        hash = (37 * hash) + DEVICE_CONFIG_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceConfig().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.LinkList parseFrom(
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(byte[] data)
+    public static context.ContextOuterClass.DeviceEvent parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.DeviceEvent parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.DeviceEvent parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkList parseDelimitedFrom(
+    public static context.ContextOuterClass.DeviceEvent parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -21062,7 +22307,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.LinkList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.DeviceEvent prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -21078,26 +22323,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.LinkList}
+     * Protobuf type {@code context.DeviceEvent}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.LinkList)
-        context.ContextOuterClass.LinkListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.DeviceEvent)
+        context.ContextOuterClass.DeviceEventOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_LinkList_descriptor;
+        return context.ContextOuterClass.internal_static_context_DeviceEvent_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_LinkList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_DeviceEvent_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.LinkList.class, context.ContextOuterClass.LinkList.Builder.class);
+                context.ContextOuterClass.DeviceEvent.class, context.ContextOuterClass.DeviceEvent.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.LinkList.newBuilder()
+      // Construct using context.ContextOuterClass.DeviceEvent.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -21110,17 +22355,28 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getLinksFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (linksBuilder_ == null) {
-          links_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (eventBuilder_ == null) {
+          event_ = null;
         } else {
-          linksBuilder_.clear();
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+        if (deviceConfigBuilder_ == null) {
+          deviceConfig_ = null;
+        } else {
+          deviceConfig_ = null;
+          deviceConfigBuilder_ = null;
         }
         return this;
       }
@@ -21128,17 +22384,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_LinkList_descriptor;
+        return context.ContextOuterClass.internal_static_context_DeviceEvent_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkList getDefaultInstanceForType() {
-        return context.ContextOuterClass.LinkList.getDefaultInstance();
+      public context.ContextOuterClass.DeviceEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.DeviceEvent.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkList build() {
-        context.ContextOuterClass.LinkList result = buildPartial();
+      public context.ContextOuterClass.DeviceEvent build() {
+        context.ContextOuterClass.DeviceEvent result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -21146,17 +22402,22 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkList buildPartial() {
-        context.ContextOuterClass.LinkList result = new context.ContextOuterClass.LinkList(this);
-        int from_bitField0_ = bitField0_;
-        if (linksBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            links_ = java.util.Collections.unmodifiableList(links_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.links_ = links_;
+      public context.ContextOuterClass.DeviceEvent buildPartial() {
+        context.ContextOuterClass.DeviceEvent result = new context.ContextOuterClass.DeviceEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
         } else {
-          result.links_ = linksBuilder_.build();
+          result.event_ = eventBuilder_.build();
+        }
+        if (deviceIdBuilder_ == null) {
+          result.deviceId_ = deviceId_;
+        } else {
+          result.deviceId_ = deviceIdBuilder_.build();
+        }
+        if (deviceConfigBuilder_ == null) {
+          result.deviceConfig_ = deviceConfig_;
+        } else {
+          result.deviceConfig_ = deviceConfigBuilder_.build();
         }
         onBuilt();
         return result;
@@ -21196,41 +22457,24 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.LinkList) {
-          return mergeFrom((context.ContextOuterClass.LinkList)other);
+        if (other instanceof context.ContextOuterClass.DeviceEvent) {
+          return mergeFrom((context.ContextOuterClass.DeviceEvent)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.LinkList other) {
-        if (other == context.ContextOuterClass.LinkList.getDefaultInstance()) return this;
-        if (linksBuilder_ == null) {
-          if (!other.links_.isEmpty()) {
-            if (links_.isEmpty()) {
-              links_ = other.links_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureLinksIsMutable();
-              links_.addAll(other.links_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.links_.isEmpty()) {
-            if (linksBuilder_.isEmpty()) {
-              linksBuilder_.dispose();
-              linksBuilder_ = null;
-              links_ = other.links_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              linksBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getLinksFieldBuilder() : null;
-            } else {
-              linksBuilder_.addAllMessages(other.links_);
-            }
-          }
+      public Builder mergeFrom(context.ContextOuterClass.DeviceEvent other) {
+        if (other == context.ContextOuterClass.DeviceEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (other.hasDeviceId()) {
+          mergeDeviceId(other.getDeviceId());
+        }
+        if (other.hasDeviceConfig()) {
+          mergeDeviceConfig(other.getDeviceConfig());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -21247,11 +22491,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.LinkList parsedMessage = null;
+        context.ContextOuterClass.DeviceEvent parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.LinkList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.DeviceEvent) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -21260,246 +22504,362 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.Link> links_ =
-        java.util.Collections.emptyList();
-      private void ensureLinksIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          links_ = new java.util.ArrayList<context.ContextOuterClass.Link>(links_);
-          bitField0_ |= 0x00000001;
-         }
+      private context.ContextOuterClass.Event event_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
+      /**
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
+       */
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
       }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder> linksBuilder_;
-
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
        */
-      public java.util.List<context.ContextOuterClass.Link> getLinksList() {
-        if (linksBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(links_);
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         } else {
-          return linksBuilder_.getMessageList();
+          return eventBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public int getLinksCount() {
-        if (linksBuilder_ == null) {
-          return links_.size();
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          event_ = value;
+          onChanged();
         } else {
-          return linksBuilder_.getCount();
+          eventBuilder_.setMessage(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public context.ContextOuterClass.Link getLinks(int index) {
-        if (linksBuilder_ == null) {
-          return links_.get(index);
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
+          onChanged();
         } else {
-          return linksBuilder_.getMessage(index);
+          eventBuilder_.setMessage(builderForValue.build());
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setLinks(
-          int index, context.ContextOuterClass.Link value) {
-        if (linksBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+          } else {
+            event_ = value;
           }
-          ensureLinksIsMutable();
-          links_.set(index, value);
           onChanged();
         } else {
-          linksBuilder_.setMessage(index, value);
+          eventBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setLinks(
-          int index, context.ContextOuterClass.Link.Builder builderForValue) {
-        if (linksBuilder_ == null) {
-          ensureLinksIsMutable();
-          links_.set(index, builderForValue.build());
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
           onChanged();
         } else {
-          linksBuilder_.setMessage(index, builderForValue.build());
+          event_ = null;
+          eventBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addLinks(context.ContextOuterClass.Link value) {
-        if (linksBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureLinksIsMutable();
-          links_.add(value);
-          onChanged();
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+        
+        onChanged();
+        return getEventFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
         } else {
-          linksBuilder_.addMessage(value);
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addLinks(
-          int index, context.ContextOuterClass.Link value) {
-        if (linksBuilder_ == null) {
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
+          getEventFieldBuilder() {
+        if (eventBuilder_ == null) {
+          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
+                  getEvent(),
+                  getParentForChildren(),
+                  isClean());
+          event_ = null;
+        }
+        return eventBuilder_;
+      }
+
+      private context.ContextOuterClass.DeviceId deviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       * @return Whether the deviceId field is set.
+       */
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       * @return The deviceId.
+       */
+      public context.ContextOuterClass.DeviceId getDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        } else {
+          return deviceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureLinksIsMutable();
-          links_.add(index, value);
+          deviceId_ = value;
           onChanged();
         } else {
-          linksBuilder_.addMessage(index, value);
+          deviceIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder addLinks(
-          context.ContextOuterClass.Link.Builder builderForValue) {
-        if (linksBuilder_ == null) {
-          ensureLinksIsMutable();
-          links_.add(builderForValue.build());
+      public Builder setDeviceId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = builderForValue.build();
           onChanged();
         } else {
-          linksBuilder_.addMessage(builderForValue.build());
+          deviceIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder addLinks(
-          int index, context.ContextOuterClass.Link.Builder builderForValue) {
-        if (linksBuilder_ == null) {
-          ensureLinksIsMutable();
-          links_.add(index, builderForValue.build());
+      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (deviceId_ != null) {
+            deviceId_ =
+              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+          } else {
+            deviceId_ = value;
+          }
           onChanged();
         } else {
-          linksBuilder_.addMessage(index, builderForValue.build());
+          deviceIdBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder addAllLinks(
-          java.lang.Iterable<? extends context.ContextOuterClass.Link> values) {
-        if (linksBuilder_ == null) {
-          ensureLinksIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, links_);
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
           onChanged();
         } else {
-          linksBuilder_.addAllMessages(values);
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder clearLinks() {
-        if (linksBuilder_ == null) {
-          links_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+        
+        onChanged();
+        return getDeviceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+        if (deviceIdBuilder_ != null) {
+          return deviceIdBuilder_.getMessageOrBuilder();
         } else {
-          linksBuilder_.clear();
+          return deviceId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder removeLinks(int index) {
-        if (linksBuilder_ == null) {
-          ensureLinksIsMutable();
-          links_.remove(index);
-          onChanged();
-        } else {
-          linksBuilder_.remove(index);
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdFieldBuilder() {
+        if (deviceIdBuilder_ == null) {
+          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  getDeviceId(),
+                  getParentForChildren(),
+                  isClean());
+          deviceId_ = null;
         }
-        return this;
+        return deviceIdBuilder_;
       }
+
+      private context.ContextOuterClass.DeviceConfig deviceConfig_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder> deviceConfigBuilder_;
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       * @return Whether the deviceConfig field is set.
        */
-      public context.ContextOuterClass.Link.Builder getLinksBuilder(
-          int index) {
-        return getLinksFieldBuilder().getBuilder(index);
+      public boolean hasDeviceConfig() {
+        return deviceConfigBuilder_ != null || deviceConfig_ != null;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       * @return The deviceConfig.
        */
-      public context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
-          int index) {
-        if (linksBuilder_ == null) {
-          return links_.get(index);  } else {
-          return linksBuilder_.getMessageOrBuilder(index);
+      public context.ContextOuterClass.DeviceConfig getDeviceConfig() {
+        if (deviceConfigBuilder_ == null) {
+          return deviceConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
+        } else {
+          return deviceConfigBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>.context.DeviceConfig device_config = 3;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
-           getLinksOrBuilderList() {
-        if (linksBuilder_ != null) {
-          return linksBuilder_.getMessageOrBuilderList();
+      public Builder setDeviceConfig(context.ContextOuterClass.DeviceConfig value) {
+        if (deviceConfigBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          deviceConfig_ = value;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(links_);
+          deviceConfigBuilder_.setMessage(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>.context.DeviceConfig device_config = 3;</code>
        */
-      public context.ContextOuterClass.Link.Builder addLinksBuilder() {
-        return getLinksFieldBuilder().addBuilder(
-            context.ContextOuterClass.Link.getDefaultInstance());
+      public Builder setDeviceConfig(
+          context.ContextOuterClass.DeviceConfig.Builder builderForValue) {
+        if (deviceConfigBuilder_ == null) {
+          deviceConfig_ = builderForValue.build();
+          onChanged();
+        } else {
+          deviceConfigBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>.context.DeviceConfig device_config = 3;</code>
        */
-      public context.ContextOuterClass.Link.Builder addLinksBuilder(
-          int index) {
-        return getLinksFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Link.getDefaultInstance());
+      public Builder mergeDeviceConfig(context.ContextOuterClass.DeviceConfig value) {
+        if (deviceConfigBuilder_ == null) {
+          if (deviceConfig_ != null) {
+            deviceConfig_ =
+              context.ContextOuterClass.DeviceConfig.newBuilder(deviceConfig_).mergeFrom(value).buildPartial();
+          } else {
+            deviceConfig_ = value;
+          }
+          onChanged();
+        } else {
+          deviceConfigBuilder_.mergeFrom(value);
+        }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>.context.DeviceConfig device_config = 3;</code>
        */
-      public java.util.List<context.ContextOuterClass.Link.Builder> 
-           getLinksBuilderList() {
-        return getLinksFieldBuilder().getBuilderList();
+      public Builder clearDeviceConfig() {
+        if (deviceConfigBuilder_ == null) {
+          deviceConfig_ = null;
+          onChanged();
+        } else {
+          deviceConfig_ = null;
+          deviceConfigBuilder_ = null;
+        }
+
+        return this;
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder> 
-          getLinksFieldBuilder() {
-        if (linksBuilder_ == null) {
-          linksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder>(
-                  links_,
-                  ((bitField0_ & 0x00000001) != 0),
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       */
+      public context.ContextOuterClass.DeviceConfig.Builder getDeviceConfigBuilder() {
+        
+        onChanged();
+        return getDeviceConfigFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       */
+      public context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder() {
+        if (deviceConfigBuilder_ != null) {
+          return deviceConfigBuilder_.getMessageOrBuilder();
+        } else {
+          return deviceConfig_ == null ?
+              context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
+        }
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder> 
+          getDeviceConfigFieldBuilder() {
+        if (deviceConfigBuilder_ == null) {
+          deviceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder>(
+                  getDeviceConfig(),
                   getParentForChildren(),
                   isClean());
-          links_ = null;
+          deviceConfig_ = null;
         }
-        return linksBuilder_;
+        return deviceConfigBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -21514,100 +22874,89 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.LinkList)
+      // @@protoc_insertion_point(builder_scope:context.DeviceEvent)
     }
 
-    // @@protoc_insertion_point(class_scope:context.LinkList)
-    private static final context.ContextOuterClass.LinkList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.DeviceEvent)
+    private static final context.ContextOuterClass.DeviceEvent DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceEvent();
     }
 
-    public static context.ContextOuterClass.LinkList getDefaultInstance() {
+    public static context.ContextOuterClass.DeviceEvent getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<LinkList>
-        PARSER = new com.google.protobuf.AbstractParser<LinkList>() {
+    private static final com.google.protobuf.Parser<DeviceEvent>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceEvent>() {
       @java.lang.Override
-      public LinkList parsePartialFrom(
+      public DeviceEvent parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new LinkList(input, extensionRegistry);
+        return new DeviceEvent(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<LinkList> parser() {
+    public static com.google.protobuf.Parser<DeviceEvent> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<LinkList> getParserForType() {
+    public com.google.protobuf.Parser<DeviceEvent> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.LinkList getDefaultInstanceForType() {
+    public context.ContextOuterClass.DeviceEvent getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface LinkEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.LinkEvent)
+  public interface LinkIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.LinkId)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
-     */
-    boolean hasEvent();
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
-     */
-    context.ContextOuterClass.Event getEvent();
-    /**
-     * <code>.context.Event event = 1;</code>
-     */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
-
-    /**
-     * <code>.context.LinkId link_id = 2;</code>
-     * @return Whether the linkId field is set.
+     * <code>.context.Uuid link_uuid = 1;</code>
+     * @return Whether the linkUuid field is set.
      */
-    boolean hasLinkId();
+    boolean hasLinkUuid();
     /**
-     * <code>.context.LinkId link_id = 2;</code>
-     * @return The linkId.
+     * <code>.context.Uuid link_uuid = 1;</code>
+     * @return The linkUuid.
      */
-    context.ContextOuterClass.LinkId getLinkId();
+    context.ContextOuterClass.Uuid getLinkUuid();
     /**
-     * <code>.context.LinkId link_id = 2;</code>
+     * <code>.context.Uuid link_uuid = 1;</code>
      */
-    context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder();
+    context.ContextOuterClass.UuidOrBuilder getLinkUuidOrBuilder();
   }
   /**
-   * Protobuf type {@code context.LinkEvent}
+   * <pre>
+   * ----- Link ----------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.LinkId}
    */
-  public static final class LinkEvent extends
+  public static final class LinkId extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.LinkEvent)
-      LinkEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.LinkId)
+      LinkIdOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use LinkEvent.newBuilder() to construct.
-    private LinkEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use LinkId.newBuilder() to construct.
+    private LinkId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private LinkEvent() {
+    private LinkId() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new LinkEvent();
+      return new LinkId();
     }
 
     @java.lang.Override
@@ -21615,7 +22964,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private LinkEvent(
+    private LinkId(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -21634,27 +22983,14 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Event.Builder subBuilder = null;
-              if (event_ != null) {
-                subBuilder = event_.toBuilder();
-              }
-              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(event_);
-                event_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              context.ContextOuterClass.LinkId.Builder subBuilder = null;
-              if (linkId_ != null) {
-                subBuilder = linkId_.toBuilder();
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (linkUuid_ != null) {
+                subBuilder = linkUuid_.toBuilder();
               }
-              linkId_ = input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry);
+              linkUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(linkId_);
-                linkId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(linkUuid_);
+                linkUuid_ = subBuilder.buildPartial();
               }
 
               break;
@@ -21680,67 +23016,41 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_LinkEvent_descriptor;
+      return context.ContextOuterClass.internal_static_context_LinkId_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_LinkEvent_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_LinkId_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.LinkEvent.class, context.ContextOuterClass.LinkEvent.Builder.class);
-    }
-
-    public static final int EVENT_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Event event_;
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
-     */
-    @java.lang.Override
-    public boolean hasEvent() {
-      return event_ != null;
-    }
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
-    }
-    /**
-     * <code>.context.Event event = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
+              context.ContextOuterClass.LinkId.class, context.ContextOuterClass.LinkId.Builder.class);
     }
 
-    public static final int LINK_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.LinkId linkId_;
+    public static final int LINK_UUID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid linkUuid_;
     /**
-     * <code>.context.LinkId link_id = 2;</code>
-     * @return Whether the linkId field is set.
+     * <code>.context.Uuid link_uuid = 1;</code>
+     * @return Whether the linkUuid field is set.
      */
     @java.lang.Override
-    public boolean hasLinkId() {
-      return linkId_ != null;
+    public boolean hasLinkUuid() {
+      return linkUuid_ != null;
     }
     /**
-     * <code>.context.LinkId link_id = 2;</code>
-     * @return The linkId.
+     * <code>.context.Uuid link_uuid = 1;</code>
+     * @return The linkUuid.
      */
     @java.lang.Override
-    public context.ContextOuterClass.LinkId getLinkId() {
-      return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
+    public context.ContextOuterClass.Uuid getLinkUuid() {
+      return linkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : linkUuid_;
     }
     /**
-     * <code>.context.LinkId link_id = 2;</code>
+     * <code>.context.Uuid link_uuid = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
-      return getLinkId();
+    public context.ContextOuterClass.UuidOrBuilder getLinkUuidOrBuilder() {
+      return getLinkUuid();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -21757,11 +23067,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (event_ != null) {
-        output.writeMessage(1, getEvent());
-      }
-      if (linkId_ != null) {
-        output.writeMessage(2, getLinkId());
+      if (linkUuid_ != null) {
+        output.writeMessage(1, getLinkUuid());
       }
       unknownFields.writeTo(output);
     }
@@ -21772,13 +23079,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (event_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
-      }
-      if (linkId_ != null) {
+      if (linkUuid_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getLinkId());
+          .computeMessageSize(1, getLinkUuid());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -21790,20 +23093,15 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.LinkEvent)) {
+      if (!(obj instanceof context.ContextOuterClass.LinkId)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.LinkEvent other = (context.ContextOuterClass.LinkEvent) obj;
+      context.ContextOuterClass.LinkId other = (context.ContextOuterClass.LinkId) obj;
 
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) return false;
-      }
-      if (hasLinkId() != other.hasLinkId()) return false;
-      if (hasLinkId()) {
-        if (!getLinkId()
-            .equals(other.getLinkId())) return false;
+      if (hasLinkUuid() != other.hasLinkUuid()) return false;
+      if (hasLinkUuid()) {
+        if (!getLinkUuid()
+            .equals(other.getLinkUuid())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -21816,82 +23114,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEvent()) {
-        hash = (37 * hash) + EVENT_FIELD_NUMBER;
-        hash = (53 * hash) + getEvent().hashCode();
-      }
-      if (hasLinkId()) {
-        hash = (37 * hash) + LINK_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getLinkId().hashCode();
+      if (hasLinkUuid()) {
+        hash = (37 * hash) + LINK_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getLinkUuid().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.LinkEvent parseFrom(
+    public static context.ContextOuterClass.LinkId parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkEvent parseFrom(
+    public static context.ContextOuterClass.LinkId parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkEvent parseFrom(
+    public static context.ContextOuterClass.LinkId parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkEvent parseFrom(
+    public static context.ContextOuterClass.LinkId parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkEvent parseFrom(byte[] data)
+    public static context.ContextOuterClass.LinkId parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkEvent parseFrom(
+    public static context.ContextOuterClass.LinkId parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkEvent parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.LinkId parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkEvent parseFrom(
+    public static context.ContextOuterClass.LinkId parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkEvent parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.LinkId parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkEvent parseDelimitedFrom(
+    public static context.ContextOuterClass.LinkId parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkEvent parseFrom(
+    public static context.ContextOuterClass.LinkId parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkEvent parseFrom(
+    public static context.ContextOuterClass.LinkId parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -21904,7 +23198,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.LinkEvent prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.LinkId prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -21920,26 +23214,30 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.LinkEvent}
+     * <pre>
+     * ----- Link ----------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.LinkId}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.LinkEvent)
-        context.ContextOuterClass.LinkEventOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.LinkId)
+        context.ContextOuterClass.LinkIdOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_LinkEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_LinkId_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_LinkEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_LinkId_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.LinkEvent.class, context.ContextOuterClass.LinkEvent.Builder.class);
+                context.ContextOuterClass.LinkId.class, context.ContextOuterClass.LinkId.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.LinkEvent.newBuilder()
+      // Construct using context.ContextOuterClass.LinkId.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -21957,17 +23255,11 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
-        } else {
-          event_ = null;
-          eventBuilder_ = null;
-        }
-        if (linkIdBuilder_ == null) {
-          linkId_ = null;
+        if (linkUuidBuilder_ == null) {
+          linkUuid_ = null;
         } else {
-          linkId_ = null;
-          linkIdBuilder_ = null;
+          linkUuid_ = null;
+          linkUuidBuilder_ = null;
         }
         return this;
       }
@@ -21975,17 +23267,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_LinkEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_LinkId_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.LinkEvent.getDefaultInstance();
+      public context.ContextOuterClass.LinkId getDefaultInstanceForType() {
+        return context.ContextOuterClass.LinkId.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkEvent build() {
-        context.ContextOuterClass.LinkEvent result = buildPartial();
+      public context.ContextOuterClass.LinkId build() {
+        context.ContextOuterClass.LinkId result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -21993,17 +23285,12 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkEvent buildPartial() {
-        context.ContextOuterClass.LinkEvent result = new context.ContextOuterClass.LinkEvent(this);
-        if (eventBuilder_ == null) {
-          result.event_ = event_;
-        } else {
-          result.event_ = eventBuilder_.build();
-        }
-        if (linkIdBuilder_ == null) {
-          result.linkId_ = linkId_;
+      public context.ContextOuterClass.LinkId buildPartial() {
+        context.ContextOuterClass.LinkId result = new context.ContextOuterClass.LinkId(this);
+        if (linkUuidBuilder_ == null) {
+          result.linkUuid_ = linkUuid_;
         } else {
-          result.linkId_ = linkIdBuilder_.build();
+          result.linkUuid_ = linkUuidBuilder_.build();
         }
         onBuilt();
         return result;
@@ -22043,21 +23330,18 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.LinkEvent) {
-          return mergeFrom((context.ContextOuterClass.LinkEvent)other);
+        if (other instanceof context.ContextOuterClass.LinkId) {
+          return mergeFrom((context.ContextOuterClass.LinkId)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.LinkEvent other) {
-        if (other == context.ContextOuterClass.LinkEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
-        }
-        if (other.hasLinkId()) {
-          mergeLinkId(other.getLinkId());
+      public Builder mergeFrom(context.ContextOuterClass.LinkId other) {
+        if (other == context.ContextOuterClass.LinkId.getDefaultInstance()) return this;
+        if (other.hasLinkUuid()) {
+          mergeLinkUuid(other.getLinkUuid());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -22074,11 +23358,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.LinkEvent parsedMessage = null;
+        context.ContextOuterClass.LinkId parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.LinkEvent) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.LinkId) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -22088,247 +23372,128 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private context.ContextOuterClass.Event event_;
+      private context.ContextOuterClass.Uuid linkUuid_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> linkUuidBuilder_;
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return Whether the event field is set.
+       * <code>.context.Uuid link_uuid = 1;</code>
+       * @return Whether the linkUuid field is set.
        */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
+      public boolean hasLinkUuid() {
+        return linkUuidBuilder_ != null || linkUuid_ != null;
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
+       * <code>.context.Uuid link_uuid = 1;</code>
+       * @return The linkUuid.
        */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+      public context.ContextOuterClass.Uuid getLinkUuid() {
+        if (linkUuidBuilder_ == null) {
+          return linkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : linkUuid_;
         } else {
-          return eventBuilder_.getMessage();
+          return linkUuidBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.Uuid link_uuid = 1;</code>
        */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
+      public Builder setLinkUuid(context.ContextOuterClass.Uuid value) {
+        if (linkUuidBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          event_ = value;
+          linkUuid_ = value;
           onChanged();
         } else {
-          eventBuilder_.setMessage(value);
+          linkUuidBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.Uuid link_uuid = 1;</code>
        */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
+      public Builder setLinkUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (linkUuidBuilder_ == null) {
+          linkUuid_ = builderForValue.build();
           onChanged();
         } else {
-          eventBuilder_.setMessage(builderForValue.build());
+          linkUuidBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.Uuid link_uuid = 1;</code>
        */
-      public Builder mergeEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
-          if (event_ != null) {
-            event_ =
-              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+      public Builder mergeLinkUuid(context.ContextOuterClass.Uuid value) {
+        if (linkUuidBuilder_ == null) {
+          if (linkUuid_ != null) {
+            linkUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(linkUuid_).mergeFrom(value).buildPartial();
           } else {
-            event_ = value;
+            linkUuid_ = value;
           }
           onChanged();
         } else {
-          eventBuilder_.mergeFrom(value);
+          linkUuidBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.Uuid link_uuid = 1;</code>
        */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
+      public Builder clearLinkUuid() {
+        if (linkUuidBuilder_ == null) {
+          linkUuid_ = null;
           onChanged();
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          linkUuid_ = null;
+          linkUuidBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.Uuid link_uuid = 1;</code>
        */
-      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+      public context.ContextOuterClass.Uuid.Builder getLinkUuidBuilder() {
         
         onChanged();
-        return getEventFieldBuilder().getBuilder();
+        return getLinkUuidFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.Uuid link_uuid = 1;</code>
        */
-      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-        if (eventBuilder_ != null) {
-          return eventBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.UuidOrBuilder getLinkUuidOrBuilder() {
+        if (linkUuidBuilder_ != null) {
+          return linkUuidBuilder_.getMessageOrBuilder();
         } else {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+          return linkUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : linkUuid_;
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.Uuid link_uuid = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
-          getEventFieldBuilder() {
-        if (eventBuilder_ == null) {
-          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
-                  getEvent(),
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getLinkUuidFieldBuilder() {
+        if (linkUuidBuilder_ == null) {
+          linkUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getLinkUuid(),
                   getParentForChildren(),
                   isClean());
-          event_ = null;
+          linkUuid_ = null;
         }
-        return eventBuilder_;
-      }
-
-      private context.ContextOuterClass.LinkId linkId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdBuilder_;
-      /**
-       * <code>.context.LinkId link_id = 2;</code>
-       * @return Whether the linkId field is set.
-       */
-      public boolean hasLinkId() {
-        return linkIdBuilder_ != null || linkId_ != null;
+        return linkUuidBuilder_;
       }
-      /**
-       * <code>.context.LinkId link_id = 2;</code>
-       * @return The linkId.
-       */
-      public context.ContextOuterClass.LinkId getLinkId() {
-        if (linkIdBuilder_ == null) {
-          return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
-        } else {
-          return linkIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.LinkId link_id = 2;</code>
-       */
-      public Builder setLinkId(context.ContextOuterClass.LinkId value) {
-        if (linkIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          linkId_ = value;
-          onChanged();
-        } else {
-          linkIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.LinkId link_id = 2;</code>
-       */
-      public Builder setLinkId(
-          context.ContextOuterClass.LinkId.Builder builderForValue) {
-        if (linkIdBuilder_ == null) {
-          linkId_ = builderForValue.build();
-          onChanged();
-        } else {
-          linkIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.LinkId link_id = 2;</code>
-       */
-      public Builder mergeLinkId(context.ContextOuterClass.LinkId value) {
-        if (linkIdBuilder_ == null) {
-          if (linkId_ != null) {
-            linkId_ =
-              context.ContextOuterClass.LinkId.newBuilder(linkId_).mergeFrom(value).buildPartial();
-          } else {
-            linkId_ = value;
-          }
-          onChanged();
-        } else {
-          linkIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.LinkId link_id = 2;</code>
-       */
-      public Builder clearLinkId() {
-        if (linkIdBuilder_ == null) {
-          linkId_ = null;
-          onChanged();
-        } else {
-          linkId_ = null;
-          linkIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.LinkId link_id = 2;</code>
-       */
-      public context.ContextOuterClass.LinkId.Builder getLinkIdBuilder() {
-        
-        onChanged();
-        return getLinkIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.LinkId link_id = 2;</code>
-       */
-      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
-        if (linkIdBuilder_ != null) {
-          return linkIdBuilder_.getMessageOrBuilder();
-        } else {
-          return linkId_ == null ?
-              context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
-        }
-      }
-      /**
-       * <code>.context.LinkId link_id = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
-          getLinkIdFieldBuilder() {
-        if (linkIdBuilder_ == null) {
-          linkIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
-                  getLinkId(),
-                  getParentForChildren(),
-                  isClean());
-          linkId_ = null;
-        }
-        return linkIdBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
       }
 
       @java.lang.Override
@@ -22338,104 +23503,123 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.LinkEvent)
+      // @@protoc_insertion_point(builder_scope:context.LinkId)
     }
 
-    // @@protoc_insertion_point(class_scope:context.LinkEvent)
-    private static final context.ContextOuterClass.LinkEvent DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.LinkId)
+    private static final context.ContextOuterClass.LinkId DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkEvent();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkId();
     }
 
-    public static context.ContextOuterClass.LinkEvent getDefaultInstance() {
+    public static context.ContextOuterClass.LinkId getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<LinkEvent>
-        PARSER = new com.google.protobuf.AbstractParser<LinkEvent>() {
+    private static final com.google.protobuf.Parser<LinkId>
+        PARSER = new com.google.protobuf.AbstractParser<LinkId>() {
       @java.lang.Override
-      public LinkEvent parsePartialFrom(
+      public LinkId parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new LinkEvent(input, extensionRegistry);
+        return new LinkId(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<LinkEvent> parser() {
+    public static com.google.protobuf.Parser<LinkId> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<LinkEvent> getParserForType() {
+    public com.google.protobuf.Parser<LinkId> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.LinkEvent getDefaultInstanceForType() {
+    public context.ContextOuterClass.LinkId getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ServiceIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ServiceId)
+  public interface LinkOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Link)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return Whether the contextId field is set.
+     * <code>.context.LinkId link_id = 1;</code>
+     * @return Whether the linkId field is set.
      */
-    boolean hasContextId();
+    boolean hasLinkId();
     /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return The contextId.
+     * <code>.context.LinkId link_id = 1;</code>
+     * @return The linkId.
      */
-    context.ContextOuterClass.ContextId getContextId();
+    context.ContextOuterClass.LinkId getLinkId();
     /**
-     * <code>.context.ContextId context_id = 1;</code>
+     * <code>.context.LinkId link_id = 1;</code>
      */
-    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
+    context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder();
 
     /**
-     * <code>.context.Uuid service_uuid = 2;</code>
-     * @return Whether the serviceUuid field is set.
+     * <code>string name = 2;</code>
+     * @return The name.
      */
-    boolean hasServiceUuid();
+    java.lang.String getName();
     /**
-     * <code>.context.Uuid service_uuid = 2;</code>
-     * @return The serviceUuid.
+     * <code>string name = 2;</code>
+     * @return The bytes for name.
      */
-    context.ContextOuterClass.Uuid getServiceUuid();
+    com.google.protobuf.ByteString
+        getNameBytes();
+
     /**
-     * <code>.context.Uuid service_uuid = 2;</code>
+     * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder();
+    java.util.List<context.ContextOuterClass.EndPointId> 
+        getLinkEndpointIdsList();
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+     */
+    context.ContextOuterClass.EndPointId getLinkEndpointIds(int index);
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+     */
+    int getLinkEndpointIdsCount();
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getLinkEndpointIdsOrBuilderList();
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(
+        int index);
   }
   /**
-   * <pre>
-   * ----- Service -------------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.ServiceId}
+   * Protobuf type {@code context.Link}
    */
-  public static final class ServiceId extends
+  public static final class Link extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ServiceId)
-      ServiceIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Link)
+      LinkOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ServiceId.newBuilder() to construct.
-    private ServiceId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Link.newBuilder() to construct.
+    private Link(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ServiceId() {
+    private Link() {
+      name_ = "";
+      linkEndpointIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ServiceId();
+      return new Link();
     }
 
     @java.lang.Override
@@ -22443,7 +23627,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ServiceId(
+    private Link(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -22451,6 +23635,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -22462,29 +23647,31 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.ContextId.Builder subBuilder = null;
-              if (contextId_ != null) {
-                subBuilder = contextId_.toBuilder();
+              context.ContextOuterClass.LinkId.Builder subBuilder = null;
+              if (linkId_ != null) {
+                subBuilder = linkId_.toBuilder();
               }
-              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
+              linkId_ = input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(contextId_);
-                contextId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(linkId_);
+                linkId_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (serviceUuid_ != null) {
-                subBuilder = serviceUuid_.toBuilder();
-              }
-              serviceUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(serviceUuid_);
-                serviceUuid_ = subBuilder.buildPartial();
-              }
+              java.lang.String s = input.readStringRequireUtf8();
 
+              name_ = s;
+              break;
+            }
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                linkEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              linkEndpointIds_.add(
+                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -22502,73 +23689,128 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          linkEndpointIds_ = java.util.Collections.unmodifiableList(linkEndpointIds_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ServiceId_descriptor;
+      return context.ContextOuterClass.internal_static_context_Link_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ServiceId_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Link_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ServiceId.class, context.ContextOuterClass.ServiceId.Builder.class);
+              context.ContextOuterClass.Link.class, context.ContextOuterClass.Link.Builder.class);
     }
 
-    public static final int CONTEXT_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.ContextId contextId_;
+    public static final int LINK_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.LinkId linkId_;
     /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return Whether the contextId field is set.
+     * <code>.context.LinkId link_id = 1;</code>
+     * @return Whether the linkId field is set.
      */
     @java.lang.Override
-    public boolean hasContextId() {
-      return contextId_ != null;
+    public boolean hasLinkId() {
+      return linkId_ != null;
     }
     /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return The contextId.
+     * <code>.context.LinkId link_id = 1;</code>
+     * @return The linkId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ContextId getContextId() {
-      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+    public context.ContextOuterClass.LinkId getLinkId() {
+      return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
     }
     /**
-     * <code>.context.ContextId context_id = 1;</code>
+     * <code>.context.LinkId link_id = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-      return getContextId();
+    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
+      return getLinkId();
     }
 
-    public static final int SERVICE_UUID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.Uuid serviceUuid_;
+    public static final int NAME_FIELD_NUMBER = 2;
+    private volatile java.lang.Object name_;
     /**
-     * <code>.context.Uuid service_uuid = 2;</code>
-     * @return Whether the serviceUuid field is set.
+     * <code>string name = 2;</code>
+     * @return The name.
      */
     @java.lang.Override
-    public boolean hasServiceUuid() {
-      return serviceUuid_ != null;
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        name_ = s;
+        return s;
+      }
     }
     /**
-     * <code>.context.Uuid service_uuid = 2;</code>
-     * @return The serviceUuid.
+     * <code>string name = 2;</code>
+     * @return The bytes for name.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getServiceUuid() {
-      return serviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : serviceUuid_;
+    public com.google.protobuf.ByteString
+        getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
+
+    public static final int LINK_ENDPOINT_IDS_FIELD_NUMBER = 3;
+    private java.util.List<context.ContextOuterClass.EndPointId> linkEndpointIds_;
     /**
-     * <code>.context.Uuid service_uuid = 2;</code>
+     * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder() {
-      return getServiceUuid();
+    public java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList() {
+      return linkEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getLinkEndpointIdsOrBuilderList() {
+      return linkEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public int getLinkEndpointIdsCount() {
+      return linkEndpointIds_.size();
+    }
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getLinkEndpointIds(int index) {
+      return linkEndpointIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(
+        int index) {
+      return linkEndpointIds_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -22585,11 +23827,14 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (contextId_ != null) {
-        output.writeMessage(1, getContextId());
+      if (linkId_ != null) {
+        output.writeMessage(1, getLinkId());
       }
-      if (serviceUuid_ != null) {
-        output.writeMessage(2, getServiceUuid());
+      if (!getNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
+      }
+      for (int i = 0; i < linkEndpointIds_.size(); i++) {
+        output.writeMessage(3, linkEndpointIds_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -22600,13 +23845,16 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (contextId_ != null) {
+      if (linkId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getContextId());
+          .computeMessageSize(1, getLinkId());
       }
-      if (serviceUuid_ != null) {
+      if (!getNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
+      }
+      for (int i = 0; i < linkEndpointIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getServiceUuid());
+          .computeMessageSize(3, linkEndpointIds_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -22618,21 +23866,20 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ServiceId)) {
+      if (!(obj instanceof context.ContextOuterClass.Link)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ServiceId other = (context.ContextOuterClass.ServiceId) obj;
+      context.ContextOuterClass.Link other = (context.ContextOuterClass.Link) obj;
 
-      if (hasContextId() != other.hasContextId()) return false;
-      if (hasContextId()) {
-        if (!getContextId()
-            .equals(other.getContextId())) return false;
-      }
-      if (hasServiceUuid() != other.hasServiceUuid()) return false;
-      if (hasServiceUuid()) {
-        if (!getServiceUuid()
-            .equals(other.getServiceUuid())) return false;
+      if (hasLinkId() != other.hasLinkId()) return false;
+      if (hasLinkId()) {
+        if (!getLinkId()
+            .equals(other.getLinkId())) return false;
       }
+      if (!getName()
+          .equals(other.getName())) return false;
+      if (!getLinkEndpointIdsList()
+          .equals(other.getLinkEndpointIdsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -22644,82 +23891,84 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasContextId()) {
-        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getContextId().hashCode();
+      if (hasLinkId()) {
+        hash = (37 * hash) + LINK_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getLinkId().hashCode();
       }
-      if (hasServiceUuid()) {
-        hash = (37 * hash) + SERVICE_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceUuid().hashCode();
+      hash = (37 * hash) + NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getName().hashCode();
+      if (getLinkEndpointIdsCount() > 0) {
+        hash = (37 * hash) + LINK_ENDPOINT_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getLinkEndpointIdsList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ServiceId parseFrom(
+    public static context.ContextOuterClass.Link parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceId parseFrom(
+    public static context.ContextOuterClass.Link parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceId parseFrom(
+    public static context.ContextOuterClass.Link parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceId parseFrom(
+    public static context.ContextOuterClass.Link parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceId parseFrom(byte[] data)
+    public static context.ContextOuterClass.Link parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceId parseFrom(
+    public static context.ContextOuterClass.Link parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceId parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Link parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceId parseFrom(
+    public static context.ContextOuterClass.Link parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceId parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Link parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceId parseDelimitedFrom(
+    public static context.ContextOuterClass.Link parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceId parseFrom(
+    public static context.ContextOuterClass.Link parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceId parseFrom(
+    public static context.ContextOuterClass.Link parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -22732,7 +23981,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ServiceId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Link prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -22748,30 +23997,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Service -------------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.ServiceId}
+     * Protobuf type {@code context.Link}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ServiceId)
-        context.ContextOuterClass.ServiceIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Link)
+        context.ContextOuterClass.LinkOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ServiceId_descriptor;
+        return context.ContextOuterClass.internal_static_context_Link_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ServiceId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Link_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ServiceId.class, context.ContextOuterClass.ServiceId.Builder.class);
+                context.ContextOuterClass.Link.class, context.ContextOuterClass.Link.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ServiceId.newBuilder()
+      // Construct using context.ContextOuterClass.Link.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -22784,22 +24029,25 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getLinkEndpointIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (contextIdBuilder_ == null) {
-          contextId_ = null;
+        if (linkIdBuilder_ == null) {
+          linkId_ = null;
         } else {
-          contextId_ = null;
-          contextIdBuilder_ = null;
+          linkId_ = null;
+          linkIdBuilder_ = null;
         }
-        if (serviceUuidBuilder_ == null) {
-          serviceUuid_ = null;
+        name_ = "";
+
+        if (linkEndpointIdsBuilder_ == null) {
+          linkEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          serviceUuid_ = null;
-          serviceUuidBuilder_ = null;
+          linkEndpointIdsBuilder_.clear();
         }
         return this;
       }
@@ -22807,17 +24055,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ServiceId_descriptor;
+        return context.ContextOuterClass.internal_static_context_Link_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceId getDefaultInstanceForType() {
-        return context.ContextOuterClass.ServiceId.getDefaultInstance();
+      public context.ContextOuterClass.Link getDefaultInstanceForType() {
+        return context.ContextOuterClass.Link.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceId build() {
-        context.ContextOuterClass.ServiceId result = buildPartial();
+      public context.ContextOuterClass.Link build() {
+        context.ContextOuterClass.Link result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -22825,17 +24073,23 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceId buildPartial() {
-        context.ContextOuterClass.ServiceId result = new context.ContextOuterClass.ServiceId(this);
-        if (contextIdBuilder_ == null) {
-          result.contextId_ = contextId_;
+      public context.ContextOuterClass.Link buildPartial() {
+        context.ContextOuterClass.Link result = new context.ContextOuterClass.Link(this);
+        int from_bitField0_ = bitField0_;
+        if (linkIdBuilder_ == null) {
+          result.linkId_ = linkId_;
         } else {
-          result.contextId_ = contextIdBuilder_.build();
+          result.linkId_ = linkIdBuilder_.build();
         }
-        if (serviceUuidBuilder_ == null) {
-          result.serviceUuid_ = serviceUuid_;
+        result.name_ = name_;
+        if (linkEndpointIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            linkEndpointIds_ = java.util.Collections.unmodifiableList(linkEndpointIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.linkEndpointIds_ = linkEndpointIds_;
         } else {
-          result.serviceUuid_ = serviceUuidBuilder_.build();
+          result.linkEndpointIds_ = linkEndpointIdsBuilder_.build();
         }
         onBuilt();
         return result;
@@ -22875,21 +24129,48 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ServiceId) {
-          return mergeFrom((context.ContextOuterClass.ServiceId)other);
+        if (other instanceof context.ContextOuterClass.Link) {
+          return mergeFrom((context.ContextOuterClass.Link)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ServiceId other) {
-        if (other == context.ContextOuterClass.ServiceId.getDefaultInstance()) return this;
-        if (other.hasContextId()) {
-          mergeContextId(other.getContextId());
+      public Builder mergeFrom(context.ContextOuterClass.Link other) {
+        if (other == context.ContextOuterClass.Link.getDefaultInstance()) return this;
+        if (other.hasLinkId()) {
+          mergeLinkId(other.getLinkId());
         }
-        if (other.hasServiceUuid()) {
-          mergeServiceUuid(other.getServiceUuid());
+        if (!other.getName().isEmpty()) {
+          name_ = other.name_;
+          onChanged();
+        }
+        if (linkEndpointIdsBuilder_ == null) {
+          if (!other.linkEndpointIds_.isEmpty()) {
+            if (linkEndpointIds_.isEmpty()) {
+              linkEndpointIds_ = other.linkEndpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureLinkEndpointIdsIsMutable();
+              linkEndpointIds_.addAll(other.linkEndpointIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.linkEndpointIds_.isEmpty()) {
+            if (linkEndpointIdsBuilder_.isEmpty()) {
+              linkEndpointIdsBuilder_.dispose();
+              linkEndpointIdsBuilder_ = null;
+              linkEndpointIds_ = other.linkEndpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              linkEndpointIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getLinkEndpointIdsFieldBuilder() : null;
+            } else {
+              linkEndpointIdsBuilder_.addAllMessages(other.linkEndpointIds_);
+            }
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -22906,11 +24187,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ServiceId parsedMessage = null;
+        context.ContextOuterClass.Link parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ServiceId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Link) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -22919,451 +24200,556 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
 
-      private context.ContextOuterClass.ContextId contextId_;
+      private context.ContextOuterClass.LinkId linkId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdBuilder_;
       /**
-       * <code>.context.ContextId context_id = 1;</code>
-       * @return Whether the contextId field is set.
+       * <code>.context.LinkId link_id = 1;</code>
+       * @return Whether the linkId field is set.
        */
-      public boolean hasContextId() {
-        return contextIdBuilder_ != null || contextId_ != null;
+      public boolean hasLinkId() {
+        return linkIdBuilder_ != null || linkId_ != null;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
-       * @return The contextId.
+       * <code>.context.LinkId link_id = 1;</code>
+       * @return The linkId.
        */
-      public context.ContextOuterClass.ContextId getContextId() {
-        if (contextIdBuilder_ == null) {
-          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+      public context.ContextOuterClass.LinkId getLinkId() {
+        if (linkIdBuilder_ == null) {
+          return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
         } else {
-          return contextIdBuilder_.getMessage();
+          return linkIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.LinkId link_id = 1;</code>
        */
-      public Builder setContextId(context.ContextOuterClass.ContextId value) {
-        if (contextIdBuilder_ == null) {
+      public Builder setLinkId(context.ContextOuterClass.LinkId value) {
+        if (linkIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          contextId_ = value;
+          linkId_ = value;
           onChanged();
         } else {
-          contextIdBuilder_.setMessage(value);
+          linkIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.LinkId link_id = 1;</code>
        */
-      public Builder setContextId(
-          context.ContextOuterClass.ContextId.Builder builderForValue) {
-        if (contextIdBuilder_ == null) {
-          contextId_ = builderForValue.build();
+      public Builder setLinkId(
+          context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdBuilder_ == null) {
+          linkId_ = builderForValue.build();
           onChanged();
         } else {
-          contextIdBuilder_.setMessage(builderForValue.build());
+          linkIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.LinkId link_id = 1;</code>
        */
-      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
-        if (contextIdBuilder_ == null) {
-          if (contextId_ != null) {
-            contextId_ =
-              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+      public Builder mergeLinkId(context.ContextOuterClass.LinkId value) {
+        if (linkIdBuilder_ == null) {
+          if (linkId_ != null) {
+            linkId_ =
+              context.ContextOuterClass.LinkId.newBuilder(linkId_).mergeFrom(value).buildPartial();
           } else {
-            contextId_ = value;
+            linkId_ = value;
           }
           onChanged();
         } else {
-          contextIdBuilder_.mergeFrom(value);
+          linkIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.LinkId link_id = 1;</code>
        */
-      public Builder clearContextId() {
-        if (contextIdBuilder_ == null) {
-          contextId_ = null;
+      public Builder clearLinkId() {
+        if (linkIdBuilder_ == null) {
+          linkId_ = null;
           onChanged();
         } else {
-          contextId_ = null;
-          contextIdBuilder_ = null;
+          linkId_ = null;
+          linkIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.LinkId link_id = 1;</code>
        */
-      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+      public context.ContextOuterClass.LinkId.Builder getLinkIdBuilder() {
         
         onChanged();
-        return getContextIdFieldBuilder().getBuilder();
+        return getLinkIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.LinkId link_id = 1;</code>
        */
-      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-        if (contextIdBuilder_ != null) {
-          return contextIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
+        if (linkIdBuilder_ != null) {
+          return linkIdBuilder_.getMessageOrBuilder();
         } else {
-          return contextId_ == null ?
-              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+          return linkId_ == null ?
+              context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
         }
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.LinkId link_id = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
-          getContextIdFieldBuilder() {
-        if (contextIdBuilder_ == null) {
-          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
-                  getContextId(),
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
+          getLinkIdFieldBuilder() {
+        if (linkIdBuilder_ == null) {
+          linkIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
+                  getLinkId(),
                   getParentForChildren(),
                   isClean());
-          contextId_ = null;
+          linkId_ = null;
         }
-        return contextIdBuilder_;
+        return linkIdBuilder_;
       }
 
-      private context.ContextOuterClass.Uuid serviceUuid_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> serviceUuidBuilder_;
+      private java.lang.Object name_ = "";
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
-       * @return Whether the serviceUuid field is set.
+       * <code>string name = 2;</code>
+       * @return The name.
        */
-      public boolean hasServiceUuid() {
-        return serviceUuidBuilder_ != null || serviceUuid_ != null;
+      public java.lang.String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          name_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
       }
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
-       * @return The serviceUuid.
+       * <code>string name = 2;</code>
+       * @return The bytes for name.
        */
-      public context.ContextOuterClass.Uuid getServiceUuid() {
-        if (serviceUuidBuilder_ == null) {
-          return serviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : serviceUuid_;
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
         } else {
-          return serviceUuidBuilder_.getMessage();
+          return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
+       * <code>string name = 2;</code>
+       * @param value The name to set.
+       * @return This builder for chaining.
        */
-      public Builder setServiceUuid(context.ContextOuterClass.Uuid value) {
-        if (serviceUuidBuilder_ == null) {
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @param value The bytes for name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        name_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<context.ContextOuterClass.EndPointId> linkEndpointIds_ =
+        java.util.Collections.emptyList();
+      private void ensureLinkEndpointIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          linkEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(linkEndpointIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> linkEndpointIdsBuilder_;
+
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList() {
+        if (linkEndpointIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(linkEndpointIds_);
+        } else {
+          return linkEndpointIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+       */
+      public int getLinkEndpointIdsCount() {
+        if (linkEndpointIdsBuilder_ == null) {
+          return linkEndpointIds_.size();
+        } else {
+          return linkEndpointIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId getLinkEndpointIds(int index) {
+        if (linkEndpointIdsBuilder_ == null) {
+          return linkEndpointIds_.get(index);
+        } else {
+          return linkEndpointIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+       */
+      public Builder setLinkEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (linkEndpointIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          serviceUuid_ = value;
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.set(index, value);
           onChanged();
         } else {
-          serviceUuidBuilder_.setMessage(value);
+          linkEndpointIdsBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
        */
-      public Builder setServiceUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (serviceUuidBuilder_ == null) {
-          serviceUuid_ = builderForValue.build();
+      public Builder setLinkEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (linkEndpointIdsBuilder_ == null) {
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          serviceUuidBuilder_.setMessage(builderForValue.build());
+          linkEndpointIdsBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
        */
-      public Builder mergeServiceUuid(context.ContextOuterClass.Uuid value) {
-        if (serviceUuidBuilder_ == null) {
-          if (serviceUuid_ != null) {
-            serviceUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(serviceUuid_).mergeFrom(value).buildPartial();
-          } else {
-            serviceUuid_ = value;
+      public Builder addLinkEndpointIds(context.ContextOuterClass.EndPointId value) {
+        if (linkEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.add(value);
           onChanged();
         } else {
-          serviceUuidBuilder_.mergeFrom(value);
+          linkEndpointIdsBuilder_.addMessage(value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
        */
-      public Builder clearServiceUuid() {
-        if (serviceUuidBuilder_ == null) {
-          serviceUuid_ = null;
+      public Builder addLinkEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (linkEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.add(index, value);
           onChanged();
         } else {
-          serviceUuid_ = null;
-          serviceUuidBuilder_ = null;
+          linkEndpointIdsBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getServiceUuidBuilder() {
-        
-        onChanged();
-        return getServiceUuidFieldBuilder().getBuilder();
+      public Builder addLinkEndpointIds(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (linkEndpointIdsBuilder_ == null) {
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          linkEndpointIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
       }
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder() {
-        if (serviceUuidBuilder_ != null) {
-          return serviceUuidBuilder_.getMessageOrBuilder();
+      public Builder addLinkEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (linkEndpointIdsBuilder_ == null) {
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.add(index, builderForValue.build());
+          onChanged();
         } else {
-          return serviceUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : serviceUuid_;
+          linkEndpointIdsBuilder_.addMessage(index, builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getServiceUuidFieldBuilder() {
-        if (serviceUuidBuilder_ == null) {
-          serviceUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getServiceUuid(),
+      public Builder addAllLinkEndpointIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
+        if (linkEndpointIdsBuilder_ == null) {
+          ensureLinkEndpointIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, linkEndpointIds_);
+          onChanged();
+        } else {
+          linkEndpointIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+       */
+      public Builder clearLinkEndpointIds() {
+        if (linkEndpointIdsBuilder_ == null) {
+          linkEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          linkEndpointIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+       */
+      public Builder removeLinkEndpointIds(int index) {
+        if (linkEndpointIdsBuilder_ == null) {
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.remove(index);
+          onChanged();
+        } else {
+          linkEndpointIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getLinkEndpointIdsBuilder(
+          int index) {
+        return getLinkEndpointIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(
+          int index) {
+        if (linkEndpointIdsBuilder_ == null) {
+          return linkEndpointIds_.get(index);  } else {
+          return linkEndpointIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+           getLinkEndpointIdsOrBuilderList() {
+        if (linkEndpointIdsBuilder_ != null) {
+          return linkEndpointIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(linkEndpointIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addLinkEndpointIdsBuilder() {
+        return getLinkEndpointIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addLinkEndpointIdsBuilder(
+          int index) {
+        return getLinkEndpointIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
+           getLinkEndpointIdsBuilderList() {
+        return getLinkEndpointIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getLinkEndpointIdsFieldBuilder() {
+        if (linkEndpointIdsBuilder_ == null) {
+          linkEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  linkEndpointIds_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          serviceUuid_ = null;
+          linkEndpointIds_ = null;
         }
-        return serviceUuidBuilder_;
+        return linkEndpointIdsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
         return super.setUnknownFields(unknownFields);
       }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
+      /**
+       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDeviceOperationalStatus() {
+        
+        deviceOperationalStatus_ = 0;
+        onChanged();
+        return this;
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ServiceId)
+      // @@protoc_insertion_point(builder_scope:context.Link)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ServiceId)
-    private static final context.ContextOuterClass.ServiceId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Link)
+    private static final context.ContextOuterClass.Link DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Link();
     }
 
-    public static context.ContextOuterClass.ServiceId getDefaultInstance() {
+    public static context.ContextOuterClass.Link getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ServiceId>
-        PARSER = new com.google.protobuf.AbstractParser<ServiceId>() {
+    private static final com.google.protobuf.Parser<Link>
+        PARSER = new com.google.protobuf.AbstractParser<Link>() {
       @java.lang.Override
-      public ServiceId parsePartialFrom(
+      public Link parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ServiceId(input, extensionRegistry);
+        return new Link(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ServiceId> parser() {
+    public static com.google.protobuf.Parser<Link> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ServiceId> getParserForType() {
+    public com.google.protobuf.Parser<Link> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ServiceId getDefaultInstanceForType() {
+    public context.ContextOuterClass.Link getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ServiceOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Service)
+  public interface LinkIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.LinkIdList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ServiceId service_id = 1;</code>
-     * @return Whether the serviceId field is set.
-     */
-    boolean hasServiceId();
-    /**
-     * <code>.context.ServiceId service_id = 1;</code>
-     * @return The serviceId.
-     */
-    context.ContextOuterClass.ServiceId getServiceId();
-    /**
-     * <code>.context.ServiceId service_id = 1;</code>
-     */
-    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
-
-    /**
-     * <code>.context.ServiceTypeEnum service_type = 2;</code>
-     * @return The enum numeric value on the wire for serviceType.
-     */
-    int getServiceTypeValue();
-    /**
-     * <code>.context.ServiceTypeEnum service_type = 2;</code>
-     * @return The serviceType.
-     */
-    context.ContextOuterClass.ServiceTypeEnum getServiceType();
-
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    java.util.List<context.ContextOuterClass.EndPointId> 
-        getServiceEndpointIdsList();
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    context.ContextOuterClass.EndPointId getServiceEndpointIds(int index);
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    int getServiceEndpointIdsCount();
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getServiceEndpointIdsOrBuilderList();
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    context.ContextOuterClass.EndPointIdOrBuilder getServiceEndpointIdsOrBuilder(
-        int index);
-
-    /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
-    java.util.List<context.ContextOuterClass.Constraint> 
-        getServiceConstraintsList();
+    java.util.List<context.ContextOuterClass.LinkId> 
+        getLinkIdsList();
     /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
-    context.ContextOuterClass.Constraint getServiceConstraints(int index);
+    context.ContextOuterClass.LinkId getLinkIds(int index);
     /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
-    int getServiceConstraintsCount();
+    int getLinkIdsCount();
     /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
-        getServiceConstraintsOrBuilderList();
+    java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+        getLinkIdsOrBuilderList();
     /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
-    context.ContextOuterClass.ConstraintOrBuilder getServiceConstraintsOrBuilder(
+    context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
         int index);
+  }
+  /**
+   * Protobuf type {@code context.LinkIdList}
+   */
+  public static final class LinkIdList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.LinkIdList)
+      LinkIdListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use LinkIdList.newBuilder() to construct.
+    private LinkIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private LinkIdList() {
+      linkIds_ = java.util.Collections.emptyList();
+    }
 
-    /**
-     * <code>.context.ServiceStatus service_status = 5;</code>
-     * @return Whether the serviceStatus field is set.
-     */
-    boolean hasServiceStatus();
-    /**
-     * <code>.context.ServiceStatus service_status = 5;</code>
-     * @return The serviceStatus.
-     */
-    context.ContextOuterClass.ServiceStatus getServiceStatus();
-    /**
-     * <code>.context.ServiceStatus service_status = 5;</code>
-     */
-    context.ContextOuterClass.ServiceStatusOrBuilder getServiceStatusOrBuilder();
-
-    /**
-     * <code>.context.ServiceConfig service_config = 6;</code>
-     * @return Whether the serviceConfig field is set.
-     */
-    boolean hasServiceConfig();
-    /**
-     * <code>.context.ServiceConfig service_config = 6;</code>
-     * @return The serviceConfig.
-     */
-    context.ContextOuterClass.ServiceConfig getServiceConfig();
-    /**
-     * <code>.context.ServiceConfig service_config = 6;</code>
-     */
-    context.ContextOuterClass.ServiceConfigOrBuilder getServiceConfigOrBuilder();
-
-    /**
-     * <code>.context.Timestamp timestamp = 7;</code>
-     * @return Whether the timestamp field is set.
-     */
-    boolean hasTimestamp();
-    /**
-     * <code>.context.Timestamp timestamp = 7;</code>
-     * @return The timestamp.
-     */
-    context.ContextOuterClass.Timestamp getTimestamp();
-    /**
-     * <code>.context.Timestamp timestamp = 7;</code>
-     */
-    context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder();
-  }
-  /**
-   * Protobuf type {@code context.Service}
-   */
-  public static final class Service extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Service)
-      ServiceOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use Service.newBuilder() to construct.
-    private Service(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private Service() {
-      serviceType_ = 0;
-      serviceEndpointIds_ = java.util.Collections.emptyList();
-      serviceConstraints_ = java.util.Collections.emptyList();
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new Service();
-    }
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new LinkIdList();
+    }
 
     @java.lang.Override
     public final com.google.protobuf.UnknownFieldSet
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Service(
+    private LinkIdList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -23371,7 +24757,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -23383,79 +24768,12 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
-              if (serviceId_ != null) {
-                subBuilder = serviceId_.toBuilder();
-              }
-              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(serviceId_);
-                serviceId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 16: {
-              int rawValue = input.readEnum();
-
-              serviceType_ = rawValue;
-              break;
-            }
-            case 26: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                serviceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
+                linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              serviceEndpointIds_.add(
-                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
-              break;
-            }
-            case 34: {
-              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                serviceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>();
-                mutable_bitField0_ |= 0x00000002;
-              }
-              serviceConstraints_.add(
-                  input.readMessage(context.ContextOuterClass.Constraint.parser(), extensionRegistry));
-              break;
-            }
-            case 42: {
-              context.ContextOuterClass.ServiceStatus.Builder subBuilder = null;
-              if (serviceStatus_ != null) {
-                subBuilder = serviceStatus_.toBuilder();
-              }
-              serviceStatus_ = input.readMessage(context.ContextOuterClass.ServiceStatus.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(serviceStatus_);
-                serviceStatus_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 50: {
-              context.ContextOuterClass.ServiceConfig.Builder subBuilder = null;
-              if (serviceConfig_ != null) {
-                subBuilder = serviceConfig_.toBuilder();
-              }
-              serviceConfig_ = input.readMessage(context.ContextOuterClass.ServiceConfig.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(serviceConfig_);
-                serviceConfig_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 58: {
-              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-              if (timestamp_ != null) {
-                subBuilder = timestamp_.toBuilder();
-              }
-              timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(timestamp_);
-                timestamp_ = subBuilder.buildPartial();
-              }
-
+              linkIds_.add(
+                  input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -23474,10 +24792,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          serviceEndpointIds_ = java.util.Collections.unmodifiableList(serviceEndpointIds_);
-        }
-        if (((mutable_bitField0_ & 0x00000002) != 0)) {
-          serviceConstraints_ = java.util.Collections.unmodifiableList(serviceConstraints_);
+          linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -23485,218 +24800,55 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Service_descriptor;
+      return context.ContextOuterClass.internal_static_context_LinkIdList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Service_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_LinkIdList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Service.class, context.ContextOuterClass.Service.Builder.class);
-    }
-
-    public static final int SERVICE_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.ServiceId serviceId_;
-    /**
-     * <code>.context.ServiceId service_id = 1;</code>
-     * @return Whether the serviceId field is set.
-     */
-    @java.lang.Override
-    public boolean hasServiceId() {
-      return serviceId_ != null;
-    }
-    /**
-     * <code>.context.ServiceId service_id = 1;</code>
-     * @return The serviceId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceId getServiceId() {
-      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
-    }
-    /**
-     * <code>.context.ServiceId service_id = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-      return getServiceId();
-    }
-
-    public static final int SERVICE_TYPE_FIELD_NUMBER = 2;
-    private int serviceType_;
-    /**
-     * <code>.context.ServiceTypeEnum service_type = 2;</code>
-     * @return The enum numeric value on the wire for serviceType.
-     */
-    @java.lang.Override public int getServiceTypeValue() {
-      return serviceType_;
-    }
-    /**
-     * <code>.context.ServiceTypeEnum service_type = 2;</code>
-     * @return The serviceType.
-     */
-    @java.lang.Override public context.ContextOuterClass.ServiceTypeEnum getServiceType() {
-      @SuppressWarnings("deprecation")
-      context.ContextOuterClass.ServiceTypeEnum result = context.ContextOuterClass.ServiceTypeEnum.valueOf(serviceType_);
-      return result == null ? context.ContextOuterClass.ServiceTypeEnum.UNRECOGNIZED : result;
-    }
-
-    public static final int SERVICE_ENDPOINT_IDS_FIELD_NUMBER = 3;
-    private java.util.List<context.ContextOuterClass.EndPointId> serviceEndpointIds_;
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.EndPointId> getServiceEndpointIdsList() {
-      return serviceEndpointIds_;
-    }
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getServiceEndpointIdsOrBuilderList() {
-      return serviceEndpointIds_;
-    }
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public int getServiceEndpointIdsCount() {
-      return serviceEndpointIds_.size();
-    }
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointId getServiceEndpointIds(int index) {
-      return serviceEndpointIds_.get(index);
-    }
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getServiceEndpointIdsOrBuilder(
-        int index) {
-      return serviceEndpointIds_.get(index);
+              context.ContextOuterClass.LinkIdList.class, context.ContextOuterClass.LinkIdList.Builder.class);
     }
 
-    public static final int SERVICE_CONSTRAINTS_FIELD_NUMBER = 4;
-    private java.util.List<context.ContextOuterClass.Constraint> serviceConstraints_;
+    public static final int LINK_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.LinkId> linkIds_;
     /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Constraint> getServiceConstraintsList() {
-      return serviceConstraints_;
+    public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
+      return linkIds_;
     }
     /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
-        getServiceConstraintsOrBuilderList() {
-      return serviceConstraints_;
+    public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+        getLinkIdsOrBuilderList() {
+      return linkIds_;
     }
     /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
     @java.lang.Override
-    public int getServiceConstraintsCount() {
-      return serviceConstraints_.size();
+    public int getLinkIdsCount() {
+      return linkIds_.size();
     }
     /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Constraint getServiceConstraints(int index) {
-      return serviceConstraints_.get(index);
+    public context.ContextOuterClass.LinkId getLinkIds(int index) {
+      return linkIds_.get(index);
     }
     /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConstraintOrBuilder getServiceConstraintsOrBuilder(
+    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
         int index) {
-      return serviceConstraints_.get(index);
-    }
-
-    public static final int SERVICE_STATUS_FIELD_NUMBER = 5;
-    private context.ContextOuterClass.ServiceStatus serviceStatus_;
-    /**
-     * <code>.context.ServiceStatus service_status = 5;</code>
-     * @return Whether the serviceStatus field is set.
-     */
-    @java.lang.Override
-    public boolean hasServiceStatus() {
-      return serviceStatus_ != null;
-    }
-    /**
-     * <code>.context.ServiceStatus service_status = 5;</code>
-     * @return The serviceStatus.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceStatus getServiceStatus() {
-      return serviceStatus_ == null ? context.ContextOuterClass.ServiceStatus.getDefaultInstance() : serviceStatus_;
-    }
-    /**
-     * <code>.context.ServiceStatus service_status = 5;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceStatusOrBuilder getServiceStatusOrBuilder() {
-      return getServiceStatus();
-    }
-
-    public static final int SERVICE_CONFIG_FIELD_NUMBER = 6;
-    private context.ContextOuterClass.ServiceConfig serviceConfig_;
-    /**
-     * <code>.context.ServiceConfig service_config = 6;</code>
-     * @return Whether the serviceConfig field is set.
-     */
-    @java.lang.Override
-    public boolean hasServiceConfig() {
-      return serviceConfig_ != null;
-    }
-    /**
-     * <code>.context.ServiceConfig service_config = 6;</code>
-     * @return The serviceConfig.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceConfig getServiceConfig() {
-      return serviceConfig_ == null ? context.ContextOuterClass.ServiceConfig.getDefaultInstance() : serviceConfig_;
-    }
-    /**
-     * <code>.context.ServiceConfig service_config = 6;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceConfigOrBuilder getServiceConfigOrBuilder() {
-      return getServiceConfig();
-    }
-
-    public static final int TIMESTAMP_FIELD_NUMBER = 7;
-    private context.ContextOuterClass.Timestamp timestamp_;
-    /**
-     * <code>.context.Timestamp timestamp = 7;</code>
-     * @return Whether the timestamp field is set.
-     */
-    @java.lang.Override
-    public boolean hasTimestamp() {
-      return timestamp_ != null;
-    }
-    /**
-     * <code>.context.Timestamp timestamp = 7;</code>
-     * @return The timestamp.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Timestamp getTimestamp() {
-      return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
-    }
-    /**
-     * <code>.context.Timestamp timestamp = 7;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
-      return getTimestamp();
+      return linkIds_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -23713,26 +24865,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (serviceId_ != null) {
-        output.writeMessage(1, getServiceId());
-      }
-      if (serviceType_ != context.ContextOuterClass.ServiceTypeEnum.SERVICETYPE_UNKNOWN.getNumber()) {
-        output.writeEnum(2, serviceType_);
-      }
-      for (int i = 0; i < serviceEndpointIds_.size(); i++) {
-        output.writeMessage(3, serviceEndpointIds_.get(i));
-      }
-      for (int i = 0; i < serviceConstraints_.size(); i++) {
-        output.writeMessage(4, serviceConstraints_.get(i));
-      }
-      if (serviceStatus_ != null) {
-        output.writeMessage(5, getServiceStatus());
-      }
-      if (serviceConfig_ != null) {
-        output.writeMessage(6, getServiceConfig());
-      }
-      if (timestamp_ != null) {
-        output.writeMessage(7, getTimestamp());
+      for (int i = 0; i < linkIds_.size(); i++) {
+        output.writeMessage(1, linkIds_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -23743,33 +24877,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (serviceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getServiceId());
-      }
-      if (serviceType_ != context.ContextOuterClass.ServiceTypeEnum.SERVICETYPE_UNKNOWN.getNumber()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(2, serviceType_);
-      }
-      for (int i = 0; i < serviceEndpointIds_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, serviceEndpointIds_.get(i));
-      }
-      for (int i = 0; i < serviceConstraints_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, serviceConstraints_.get(i));
-      }
-      if (serviceStatus_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, getServiceStatus());
-      }
-      if (serviceConfig_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, getServiceConfig());
-      }
-      if (timestamp_ != null) {
+      for (int i = 0; i < linkIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(7, getTimestamp());
+          .computeMessageSize(1, linkIds_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -23781,36 +24891,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Service)) {
+      if (!(obj instanceof context.ContextOuterClass.LinkIdList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Service other = (context.ContextOuterClass.Service) obj;
+      context.ContextOuterClass.LinkIdList other = (context.ContextOuterClass.LinkIdList) obj;
 
-      if (hasServiceId() != other.hasServiceId()) return false;
-      if (hasServiceId()) {
-        if (!getServiceId()
-            .equals(other.getServiceId())) return false;
-      }
-      if (serviceType_ != other.serviceType_) return false;
-      if (!getServiceEndpointIdsList()
-          .equals(other.getServiceEndpointIdsList())) return false;
-      if (!getServiceConstraintsList()
-          .equals(other.getServiceConstraintsList())) return false;
-      if (hasServiceStatus() != other.hasServiceStatus()) return false;
-      if (hasServiceStatus()) {
-        if (!getServiceStatus()
-            .equals(other.getServiceStatus())) return false;
-      }
-      if (hasServiceConfig() != other.hasServiceConfig()) return false;
-      if (hasServiceConfig()) {
-        if (!getServiceConfig()
-            .equals(other.getServiceConfig())) return false;
-      }
-      if (hasTimestamp() != other.hasTimestamp()) return false;
-      if (hasTimestamp()) {
-        if (!getTimestamp()
-            .equals(other.getTimestamp())) return false;
-      }
+      if (!getLinkIdsList()
+          .equals(other.getLinkIdsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -23822,100 +24909,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasServiceId()) {
-        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceId().hashCode();
-      }
-      hash = (37 * hash) + SERVICE_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + serviceType_;
-      if (getServiceEndpointIdsCount() > 0) {
-        hash = (37 * hash) + SERVICE_ENDPOINT_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceEndpointIdsList().hashCode();
-      }
-      if (getServiceConstraintsCount() > 0) {
-        hash = (37 * hash) + SERVICE_CONSTRAINTS_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceConstraintsList().hashCode();
-      }
-      if (hasServiceStatus()) {
-        hash = (37 * hash) + SERVICE_STATUS_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceStatus().hashCode();
-      }
-      if (hasServiceConfig()) {
-        hash = (37 * hash) + SERVICE_CONFIG_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceConfig().hashCode();
-      }
-      if (hasTimestamp()) {
-        hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
-        hash = (53 * hash) + getTimestamp().hashCode();
+      if (getLinkIdsCount() > 0) {
+        hash = (37 * hash) + LINK_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getLinkIdsList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Service parseFrom(
+    public static context.ContextOuterClass.LinkIdList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Service parseFrom(
+    public static context.ContextOuterClass.LinkIdList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Service parseFrom(
+    public static context.ContextOuterClass.LinkIdList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Service parseFrom(
+    public static context.ContextOuterClass.LinkIdList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Service parseFrom(byte[] data)
+    public static context.ContextOuterClass.LinkIdList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Service parseFrom(
+    public static context.ContextOuterClass.LinkIdList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Service parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.LinkIdList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Service parseFrom(
+    public static context.ContextOuterClass.LinkIdList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Service parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.LinkIdList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Service parseDelimitedFrom(
+    public static context.ContextOuterClass.LinkIdList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Service parseFrom(
+    public static context.ContextOuterClass.LinkIdList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Service parseFrom(
+    public static context.ContextOuterClass.LinkIdList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -23928,7 +24993,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Service prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.LinkIdList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -23944,26 +25009,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Service}
+     * Protobuf type {@code context.LinkIdList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Service)
-        context.ContextOuterClass.ServiceOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.LinkIdList)
+        context.ContextOuterClass.LinkIdListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Service_descriptor;
+        return context.ContextOuterClass.internal_static_context_LinkIdList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Service_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_LinkIdList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Service.class, context.ContextOuterClass.Service.Builder.class);
+                context.ContextOuterClass.LinkIdList.class, context.ContextOuterClass.LinkIdList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Service.newBuilder()
+      // Construct using context.ContextOuterClass.LinkIdList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -23976,50 +25041,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getServiceEndpointIdsFieldBuilder();
-          getServiceConstraintsFieldBuilder();
+          getLinkIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
-        } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
-        }
-        serviceType_ = 0;
-
-        if (serviceEndpointIdsBuilder_ == null) {
-          serviceEndpointIds_ = java.util.Collections.emptyList();
+        if (linkIdsBuilder_ == null) {
+          linkIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          serviceEndpointIdsBuilder_.clear();
-        }
-        if (serviceConstraintsBuilder_ == null) {
-          serviceConstraints_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
-        } else {
-          serviceConstraintsBuilder_.clear();
-        }
-        if (serviceStatusBuilder_ == null) {
-          serviceStatus_ = null;
-        } else {
-          serviceStatus_ = null;
-          serviceStatusBuilder_ = null;
-        }
-        if (serviceConfigBuilder_ == null) {
-          serviceConfig_ = null;
-        } else {
-          serviceConfig_ = null;
-          serviceConfigBuilder_ = null;
-        }
-        if (timestampBuilder_ == null) {
-          timestamp_ = null;
-        } else {
-          timestamp_ = null;
-          timestampBuilder_ = null;
+          linkIdsBuilder_.clear();
         }
         return this;
       }
@@ -24027,17 +25059,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Service_descriptor;
+        return context.ContextOuterClass.internal_static_context_LinkIdList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Service getDefaultInstanceForType() {
-        return context.ContextOuterClass.Service.getDefaultInstance();
+      public context.ContextOuterClass.LinkIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.LinkIdList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Service build() {
-        context.ContextOuterClass.Service result = buildPartial();
+      public context.ContextOuterClass.LinkIdList build() {
+        context.ContextOuterClass.LinkIdList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -24045,47 +25077,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Service buildPartial() {
-        context.ContextOuterClass.Service result = new context.ContextOuterClass.Service(this);
+      public context.ContextOuterClass.LinkIdList buildPartial() {
+        context.ContextOuterClass.LinkIdList result = new context.ContextOuterClass.LinkIdList(this);
         int from_bitField0_ = bitField0_;
-        if (serviceIdBuilder_ == null) {
-          result.serviceId_ = serviceId_;
-        } else {
-          result.serviceId_ = serviceIdBuilder_.build();
-        }
-        result.serviceType_ = serviceType_;
-        if (serviceEndpointIdsBuilder_ == null) {
+        if (linkIdsBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            serviceEndpointIds_ = java.util.Collections.unmodifiableList(serviceEndpointIds_);
+            linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.serviceEndpointIds_ = serviceEndpointIds_;
+          result.linkIds_ = linkIds_;
         } else {
-          result.serviceEndpointIds_ = serviceEndpointIdsBuilder_.build();
-        }
-        if (serviceConstraintsBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) != 0)) {
-            serviceConstraints_ = java.util.Collections.unmodifiableList(serviceConstraints_);
-            bitField0_ = (bitField0_ & ~0x00000002);
-          }
-          result.serviceConstraints_ = serviceConstraints_;
-        } else {
-          result.serviceConstraints_ = serviceConstraintsBuilder_.build();
-        }
-        if (serviceStatusBuilder_ == null) {
-          result.serviceStatus_ = serviceStatus_;
-        } else {
-          result.serviceStatus_ = serviceStatusBuilder_.build();
-        }
-        if (serviceConfigBuilder_ == null) {
-          result.serviceConfig_ = serviceConfig_;
-        } else {
-          result.serviceConfig_ = serviceConfigBuilder_.build();
-        }
-        if (timestampBuilder_ == null) {
-          result.timestamp_ = timestamp_;
-        } else {
-          result.timestamp_ = timestampBuilder_.build();
+          result.linkIds_ = linkIdsBuilder_.build();
         }
         onBuilt();
         return result;
@@ -24125,83 +25127,42 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Service) {
-          return mergeFrom((context.ContextOuterClass.Service)other);
+        if (other instanceof context.ContextOuterClass.LinkIdList) {
+          return mergeFrom((context.ContextOuterClass.LinkIdList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Service other) {
-        if (other == context.ContextOuterClass.Service.getDefaultInstance()) return this;
-        if (other.hasServiceId()) {
-          mergeServiceId(other.getServiceId());
-        }
-        if (other.serviceType_ != 0) {
-          setServiceTypeValue(other.getServiceTypeValue());
-        }
-        if (serviceEndpointIdsBuilder_ == null) {
-          if (!other.serviceEndpointIds_.isEmpty()) {
-            if (serviceEndpointIds_.isEmpty()) {
-              serviceEndpointIds_ = other.serviceEndpointIds_;
+      public Builder mergeFrom(context.ContextOuterClass.LinkIdList other) {
+        if (other == context.ContextOuterClass.LinkIdList.getDefaultInstance()) return this;
+        if (linkIdsBuilder_ == null) {
+          if (!other.linkIds_.isEmpty()) {
+            if (linkIds_.isEmpty()) {
+              linkIds_ = other.linkIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureServiceEndpointIdsIsMutable();
-              serviceEndpointIds_.addAll(other.serviceEndpointIds_);
+              ensureLinkIdsIsMutable();
+              linkIds_.addAll(other.linkIds_);
             }
             onChanged();
           }
         } else {
-          if (!other.serviceEndpointIds_.isEmpty()) {
-            if (serviceEndpointIdsBuilder_.isEmpty()) {
-              serviceEndpointIdsBuilder_.dispose();
-              serviceEndpointIdsBuilder_ = null;
-              serviceEndpointIds_ = other.serviceEndpointIds_;
+          if (!other.linkIds_.isEmpty()) {
+            if (linkIdsBuilder_.isEmpty()) {
+              linkIdsBuilder_.dispose();
+              linkIdsBuilder_ = null;
+              linkIds_ = other.linkIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              serviceEndpointIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getServiceEndpointIdsFieldBuilder() : null;
-            } else {
-              serviceEndpointIdsBuilder_.addAllMessages(other.serviceEndpointIds_);
-            }
-          }
-        }
-        if (serviceConstraintsBuilder_ == null) {
-          if (!other.serviceConstraints_.isEmpty()) {
-            if (serviceConstraints_.isEmpty()) {
-              serviceConstraints_ = other.serviceConstraints_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-            } else {
-              ensureServiceConstraintsIsMutable();
-              serviceConstraints_.addAll(other.serviceConstraints_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.serviceConstraints_.isEmpty()) {
-            if (serviceConstraintsBuilder_.isEmpty()) {
-              serviceConstraintsBuilder_.dispose();
-              serviceConstraintsBuilder_ = null;
-              serviceConstraints_ = other.serviceConstraints_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-              serviceConstraintsBuilder_ = 
+              linkIdsBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getServiceConstraintsFieldBuilder() : null;
+                   getLinkIdsFieldBuilder() : null;
             } else {
-              serviceConstraintsBuilder_.addAllMessages(other.serviceConstraints_);
+              linkIdsBuilder_.addAllMessages(other.linkIds_);
             }
           }
         }
-        if (other.hasServiceStatus()) {
-          mergeServiceStatus(other.getServiceStatus());
-        }
-        if (other.hasServiceConfig()) {
-          mergeServiceConfig(other.getServiceConfig());
-        }
-        if (other.hasTimestamp()) {
-          mergeTimestamp(other.getTimestamp());
-        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -24217,11 +25178,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Service parsedMessage = null;
+        context.ContextOuterClass.LinkIdList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Service) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.LinkIdList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -24232,1014 +25193,8150 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private context.ContextOuterClass.ServiceId serviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
-      /**
-       * <code>.context.ServiceId service_id = 1;</code>
-       * @return Whether the serviceId field is set.
-       */
-      public boolean hasServiceId() {
-        return serviceIdBuilder_ != null || serviceId_ != null;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 1;</code>
-       * @return The serviceId.
-       */
-      public context.ContextOuterClass.ServiceId getServiceId() {
-        if (serviceIdBuilder_ == null) {
-          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
-        } else {
-          return serviceIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.ServiceId service_id = 1;</code>
-       */
-      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          serviceId_ = value;
-          onChanged();
-        } else {
-          serviceIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 1;</code>
-       */
-      public Builder setServiceId(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = builderForValue.build();
-          onChanged();
-        } else {
-          serviceIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 1;</code>
-       */
-      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
-          if (serviceId_ != null) {
-            serviceId_ =
-              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
-          } else {
-            serviceId_ = value;
-          }
-          onChanged();
-        } else {
-          serviceIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 1;</code>
-       */
-      public Builder clearServiceId() {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
-          onChanged();
-        } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 1;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
-        
-        onChanged();
-        return getServiceIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ServiceId service_id = 1;</code>
-       */
-      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-        if (serviceIdBuilder_ != null) {
-          return serviceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return serviceId_ == null ?
-              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
-        }
-      }
-      /**
-       * <code>.context.ServiceId service_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getServiceIdFieldBuilder() {
-        if (serviceIdBuilder_ == null) {
-          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  getServiceId(),
-                  getParentForChildren(),
-                  isClean());
-          serviceId_ = null;
-        }
-        return serviceIdBuilder_;
-      }
-
-      private int serviceType_ = 0;
-      /**
-       * <code>.context.ServiceTypeEnum service_type = 2;</code>
-       * @return The enum numeric value on the wire for serviceType.
-       */
-      @java.lang.Override public int getServiceTypeValue() {
-        return serviceType_;
-      }
-      /**
-       * <code>.context.ServiceTypeEnum service_type = 2;</code>
-       * @param value The enum numeric value on the wire for serviceType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setServiceTypeValue(int value) {
-        
-        serviceType_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.context.ServiceTypeEnum service_type = 2;</code>
-       * @return The serviceType.
-       */
-      @java.lang.Override
-      public context.ContextOuterClass.ServiceTypeEnum getServiceType() {
-        @SuppressWarnings("deprecation")
-        context.ContextOuterClass.ServiceTypeEnum result = context.ContextOuterClass.ServiceTypeEnum.valueOf(serviceType_);
-        return result == null ? context.ContextOuterClass.ServiceTypeEnum.UNRECOGNIZED : result;
-      }
-      /**
-       * <code>.context.ServiceTypeEnum service_type = 2;</code>
-       * @param value The serviceType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setServiceType(context.ContextOuterClass.ServiceTypeEnum value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        
-        serviceType_ = value.getNumber();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.context.ServiceTypeEnum service_type = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearServiceType() {
-        
-        serviceType_ = 0;
-        onChanged();
-        return this;
-      }
-
-      private java.util.List<context.ContextOuterClass.EndPointId> serviceEndpointIds_ =
+      private java.util.List<context.ContextOuterClass.LinkId> linkIds_ =
         java.util.Collections.emptyList();
-      private void ensureServiceEndpointIdsIsMutable() {
+      private void ensureLinkIdsIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          serviceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(serviceEndpointIds_);
+          linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>(linkIds_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> serviceEndpointIdsBuilder_;
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdsBuilder_;
 
+      private context.ContextOuterClass.Uuid linkUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> linkUuidBuilder_;
       /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.EndPointId> getServiceEndpointIdsList() {
-        if (serviceEndpointIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(serviceEndpointIds_);
+      public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
+        if (linkIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(linkIds_);
         } else {
-          return serviceEndpointIdsBuilder_.getMessageList();
+          return linkIdsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public int getServiceEndpointIdsCount() {
-        if (serviceEndpointIdsBuilder_ == null) {
-          return serviceEndpointIds_.size();
+      public int getLinkIdsCount() {
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.size();
         } else {
-          return serviceEndpointIdsBuilder_.getCount();
+          return linkIdsBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public context.ContextOuterClass.EndPointId getServiceEndpointIds(int index) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          return serviceEndpointIds_.get(index);
+      public context.ContextOuterClass.LinkId getLinkIds(int index) {
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.get(index);
         } else {
-          return serviceEndpointIdsBuilder_.getMessage(index);
+          return linkIdsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder setServiceEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (serviceEndpointIdsBuilder_ == null) {
+      public Builder setLinkIds(
+          int index, context.ContextOuterClass.LinkId value) {
+        if (linkIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureServiceEndpointIdsIsMutable();
-          serviceEndpointIds_.set(index, value);
+          ensureLinkIdsIsMutable();
+          linkIds_.set(index, value);
           onChanged();
         } else {
-          serviceEndpointIdsBuilder_.setMessage(index, value);
+          linkIdsBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder setServiceEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          ensureServiceEndpointIdsIsMutable();
-          serviceEndpointIds_.set(index, builderForValue.build());
+      public Builder setLinkIds(
+          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          serviceEndpointIdsBuilder_.setMessage(index, builderForValue.build());
+          linkIdsBuilder_.setMessage(index, builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder addServiceEndpointIds(context.ContextOuterClass.EndPointId value) {
-        if (serviceEndpointIdsBuilder_ == null) {
+      public Builder addLinkIds(context.ContextOuterClass.LinkId value) {
+        if (linkIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureServiceEndpointIdsIsMutable();
-          serviceEndpointIds_.add(value);
+          ensureLinkIdsIsMutable();
+          linkIds_.add(value);
           onChanged();
         } else {
-          serviceEndpointIdsBuilder_.addMessage(value);
+          linkIdsBuilder_.addMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder addServiceEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (serviceEndpointIdsBuilder_ == null) {
+      public Builder addLinkIds(
+          int index, context.ContextOuterClass.LinkId value) {
+        if (linkIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureServiceEndpointIdsIsMutable();
-          serviceEndpointIds_.add(index, value);
+          ensureLinkIdsIsMutable();
+          linkIds_.add(index, value);
           onChanged();
         } else {
-          serviceEndpointIdsBuilder_.addMessage(index, value);
+          linkIdsBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder addServiceEndpointIds(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          ensureServiceEndpointIdsIsMutable();
-          serviceEndpointIds_.add(builderForValue.build());
+      public Builder addLinkIds(
+          context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.add(builderForValue.build());
           onChanged();
         } else {
-          serviceEndpointIdsBuilder_.addMessage(builderForValue.build());
+          linkIdsBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder addServiceEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          ensureServiceEndpointIdsIsMutable();
-          serviceEndpointIds_.add(index, builderForValue.build());
+      public Builder addLinkIds(
+          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.add(index, builderForValue.build());
           onChanged();
         } else {
-          serviceEndpointIdsBuilder_.addMessage(index, builderForValue.build());
+          linkIdsBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder addAllServiceEndpointIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          ensureServiceEndpointIdsIsMutable();
+      public Builder addAllLinkIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.LinkId> values) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, serviceEndpointIds_);
+              values, linkIds_);
           onChanged();
         } else {
-          serviceEndpointIdsBuilder_.addAllMessages(values);
+          linkIdsBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder clearServiceEndpointIds() {
-        if (serviceEndpointIdsBuilder_ == null) {
-          serviceEndpointIds_ = java.util.Collections.emptyList();
+      public Builder clearLinkIds() {
+        if (linkIdsBuilder_ == null) {
+          linkIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          serviceEndpointIdsBuilder_.clear();
+          linkIdsBuilder_.clear();
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder removeServiceEndpointIds(int index) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          ensureServiceEndpointIdsIsMutable();
-          serviceEndpointIds_.remove(index);
+      public Builder removeLinkIds(int index) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.remove(index);
           onChanged();
         } else {
-          serviceEndpointIdsBuilder_.remove(index);
+          linkIdsBuilder_.remove(index);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder getServiceEndpointIdsBuilder(
+      public context.ContextOuterClass.LinkId.Builder getLinkIdsBuilder(
           int index) {
-        return getServiceEndpointIdsFieldBuilder().getBuilder(index);
+        return getLinkIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public context.ContextOuterClass.EndPointIdOrBuilder getServiceEndpointIdsOrBuilder(
+      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
           int index) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          return serviceEndpointIds_.get(index);  } else {
-          return serviceEndpointIdsBuilder_.getMessageOrBuilder(index);
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.get(index);  } else {
+          return linkIdsBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-           getServiceEndpointIdsOrBuilderList() {
-        if (serviceEndpointIdsBuilder_ != null) {
-          return serviceEndpointIdsBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+           getLinkIdsOrBuilderList() {
+        if (linkIdsBuilder_ != null) {
+          return linkIdsBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(serviceEndpointIds_);
+          return java.util.Collections.unmodifiableList(linkIds_);
         }
       }
       /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder addServiceEndpointIdsBuilder() {
-        return getServiceEndpointIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder() {
+        return getLinkIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.LinkId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder addServiceEndpointIdsBuilder(
+      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder(
           int index) {
-        return getServiceEndpointIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+        return getLinkIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.LinkId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
-           getServiceEndpointIdsBuilderList() {
-        return getServiceEndpointIdsFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.LinkId.Builder> 
+           getLinkIdsBuilderList() {
+        return getLinkIdsFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getServiceEndpointIdsFieldBuilder() {
-        if (serviceEndpointIdsBuilder_ == null) {
-          serviceEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  serviceEndpointIds_,
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
+          getLinkIdsFieldBuilder() {
+        if (linkIdsBuilder_ == null) {
+          linkIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
+                  linkIds_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          serviceEndpointIds_ = null;
+          linkIds_ = null;
         }
-        return serviceEndpointIdsBuilder_;
+        return linkIdsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
       }
 
-      private java.util.List<context.ContextOuterClass.Constraint> serviceConstraints_ =
-        java.util.Collections.emptyList();
-      private void ensureServiceConstraintsIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
-          serviceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>(serviceConstraints_);
-          bitField0_ |= 0x00000002;
-         }
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
       }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> serviceConstraintsBuilder_;
 
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public java.util.List<context.ContextOuterClass.Constraint> getServiceConstraintsList() {
-        if (serviceConstraintsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(serviceConstraints_);
-        } else {
+      // @@protoc_insertion_point(builder_scope:context.LinkIdList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.LinkIdList)
+    private static final context.ContextOuterClass.LinkIdList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkIdList();
+    }
+
+    public static context.ContextOuterClass.LinkIdList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<LinkIdList>
+        PARSER = new com.google.protobuf.AbstractParser<LinkIdList>() {
+      @java.lang.Override
+      public LinkIdList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new LinkIdList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<LinkIdList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<LinkIdList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.LinkIdList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface LinkListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.LinkList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.Link links = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.Link> 
+        getLinksList();
+    /**
+     * <code>repeated .context.Link links = 1;</code>
+     */
+    context.ContextOuterClass.Link getLinks(int index);
+    /**
+     * <code>repeated .context.Link links = 1;</code>
+     */
+    int getLinksCount();
+    /**
+     * <code>repeated .context.Link links = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
+        getLinksOrBuilderList();
+    /**
+     * <code>repeated .context.Link links = 1;</code>
+     */
+    context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.LinkList}
+   */
+  public static final class LinkList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.LinkList)
+      LinkListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use LinkList.newBuilder() to construct.
+    private LinkList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private LinkList() {
+      links_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new LinkList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private LinkList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.LinkId.Builder subBuilder = null;
+              if (linkId_ != null) {
+                subBuilder = linkId_.toBuilder();
+              }
+              linkId_ = input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(linkId_);
+                linkId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              name_ = s;
+              break;
+            }
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                links_ = new java.util.ArrayList<context.ContextOuterClass.Link>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              links_.add(
+                  input.readMessage(context.ContextOuterClass.Link.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          links_ = java.util.Collections.unmodifiableList(links_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_LinkList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_LinkList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.LinkList.class, context.ContextOuterClass.LinkList.Builder.class);
+    }
+
+    public static final int LINKS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Link> links_;
+    /**
+     * <code>repeated .context.Link links = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.Link> getLinksList() {
+      return links_;
+    }
+    /**
+     * <code>repeated .context.Link links = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
+        getLinksOrBuilderList() {
+      return links_;
+    }
+    /**
+     * <code>repeated .context.Link links = 1;</code>
+     */
+    @java.lang.Override
+    public int getLinksCount() {
+      return links_.size();
+    }
+
+    public static final int NAME_FIELD_NUMBER = 2;
+    private volatile java.lang.Object name_;
+    /**
+     * <code>repeated .context.Link links = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Link getLinks(int index) {
+      return links_.get(index);
+    }
+    /**
+     * <code>repeated .context.Link links = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
+        int index) {
+      return links_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < links_.size(); i++) {
+        output.writeMessage(1, links_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < links_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, links_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.LinkList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.LinkList other = (context.ContextOuterClass.LinkList) obj;
+
+      if (!getLinksList()
+          .equals(other.getLinksList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getLinksCount() > 0) {
+        hash = (37 * hash) + LINKS_FIELD_NUMBER;
+        hash = (53 * hash) + getLinksList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.LinkList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.LinkList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.LinkList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.LinkList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.LinkList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.LinkList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.LinkList)
+        context.ContextOuterClass.LinkListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_LinkList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_LinkList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.LinkList.class, context.ContextOuterClass.LinkList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.LinkList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getLinksFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (linksBuilder_ == null) {
+          links_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          linksBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_LinkList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkList getDefaultInstanceForType() {
+        return context.ContextOuterClass.LinkList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkList build() {
+        context.ContextOuterClass.LinkList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkList buildPartial() {
+        context.ContextOuterClass.LinkList result = new context.ContextOuterClass.LinkList(this);
+        int from_bitField0_ = bitField0_;
+        if (linksBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            links_ = java.util.Collections.unmodifiableList(links_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.links_ = links_;
+        } else {
+          result.links_ = linksBuilder_.build();
+        }
+        return linkIdBuilder_;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.LinkList) {
+          return mergeFrom((context.ContextOuterClass.LinkList)other);
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.LinkList other) {
+        if (other == context.ContextOuterClass.LinkList.getDefaultInstance()) return this;
+        if (linksBuilder_ == null) {
+          if (!other.links_.isEmpty()) {
+            if (links_.isEmpty()) {
+              links_ = other.links_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureLinksIsMutable();
+              links_.addAll(other.links_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.links_.isEmpty()) {
+            if (linksBuilder_.isEmpty()) {
+              linksBuilder_.dispose();
+              linksBuilder_ = null;
+              links_ = other.links_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              linksBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getLinksFieldBuilder() : null;
+            } else {
+              linksBuilder_.addAllMessages(other.links_);
+            }
+          }
+        }
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @param value The name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.LinkList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.LinkList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private java.util.List<context.ContextOuterClass.Link> links_ =
+        java.util.Collections.emptyList();
+      private void ensureLinksIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          links_ = new java.util.ArrayList<context.ContextOuterClass.Link>(links_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder> linksBuilder_;
+
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Link> getLinksList() {
+        if (linksBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(links_);
+        } else {
+          return linksBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public int getLinksCount() {
+        if (linksBuilder_ == null) {
+          return links_.size();
+        } else {
+          return linksBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public context.ContextOuterClass.Link getLinks(int index) {
+        if (linksBuilder_ == null) {
+          return links_.get(index);
+        } else {
+          return linksBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public Builder setLinks(
+          int index, context.ContextOuterClass.Link value) {
+        if (linksBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinksIsMutable();
+          links_.set(index, value);
+          onChanged();
+        } else {
+          linksBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public Builder setLinks(
+          int index, context.ContextOuterClass.Link.Builder builderForValue) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          linksBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public Builder addLinks(context.ContextOuterClass.Link value) {
+        if (linksBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinksIsMutable();
+          links_.add(value);
+          onChanged();
+        } else {
+          linksBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public Builder addLinks(
+          int index, context.ContextOuterClass.Link value) {
+        if (linksBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinksIsMutable();
+          links_.add(index, value);
+          onChanged();
+        } else {
+          linksBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public Builder addLinks(
+          context.ContextOuterClass.Link.Builder builderForValue) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.add(builderForValue.build());
+          onChanged();
+        } else {
+          linksBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public Builder addLinks(
+          int index, context.ContextOuterClass.Link.Builder builderForValue) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          linksBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public Builder addAllLinks(
+          java.lang.Iterable<? extends context.ContextOuterClass.Link> values) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, links_);
+          onChanged();
+        } else {
+          linksBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public Builder clearLinks() {
+        if (linksBuilder_ == null) {
+          links_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          linksBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public Builder removeLinks(int index) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.remove(index);
+          onChanged();
+        } else {
+          linksBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public context.ContextOuterClass.Link.Builder getLinksBuilder(
+          int index) {
+        return getLinksFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
+          int index) {
+        if (linksBuilder_ == null) {
+          return links_.get(index);  } else {
+          return linksBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
+           getLinksOrBuilderList() {
+        if (linksBuilder_ != null) {
+          return linksBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(links_);
+        }
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public context.ContextOuterClass.Link.Builder addLinksBuilder() {
+        return getLinksFieldBuilder().addBuilder(
+            context.ContextOuterClass.Link.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public context.ContextOuterClass.Link.Builder addLinksBuilder(
+          int index) {
+        return getLinksFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Link.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Link.Builder> 
+           getLinksBuilderList() {
+        return getLinksFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder> 
+          getLinksFieldBuilder() {
+        if (linksBuilder_ == null) {
+          linksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder>(
+                  links_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          links_ = null;
+        }
+        return linksBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.LinkList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.LinkList)
+    private static final context.ContextOuterClass.LinkList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkList();
+    }
+
+    public static context.ContextOuterClass.LinkList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<LinkList>
+        PARSER = new com.google.protobuf.AbstractParser<LinkList>() {
+      @java.lang.Override
+      public LinkList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new LinkList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<LinkList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<LinkList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.LinkList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface LinkEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.LinkEvent)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    boolean hasEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    context.ContextOuterClass.Event getEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
+    /**
+     * <code>.context.LinkId link_id = 2;</code>
+     * @return Whether the linkId field is set.
+     */
+    boolean hasLinkId();
+    /**
+     * <code>.context.LinkId link_id = 2;</code>
+     * @return The linkId.
+     */
+    context.ContextOuterClass.LinkId getLinkId();
+    /**
+     * <code>.context.LinkId link_id = 2;</code>
+     */
+    context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder();
+  }
+  /**
+   * Protobuf type {@code context.LinkEvent}
+   */
+  public static final class LinkEvent extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.LinkEvent)
+      LinkEventOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use LinkEvent.newBuilder() to construct.
+    private LinkEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private LinkEvent() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new LinkEvent();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private LinkEvent(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
+              }
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.LinkId.Builder subBuilder = null;
+              if (linkId_ != null) {
+                subBuilder = linkId_.toBuilder();
+              }
+              linkId_ = input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(linkId_);
+                linkId_ = subBuilder.buildPartial();
+              }
+              linkIds_.add(
+                  input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_LinkEvent_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_LinkEvent_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.LinkEvent.class, context.ContextOuterClass.LinkEvent.Builder.class);
+    }
+
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    @java.lang.Override
+    public boolean hasEvent() {
+      return event_ != null;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_LinkIdList_descriptor;
+    }
+
+    public static final int LINK_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.LinkId linkId_;
+    /**
+     * <code>.context.LinkId link_id = 2;</code>
+     * @return Whether the linkId field is set.
+     */
+    @java.lang.Override
+    public boolean hasLinkId() {
+      return linkId_ != null;
+    }
+    /**
+     * <code>.context.LinkId link_id = 2;</code>
+     * @return The linkId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkId getLinkId() {
+      return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
+    }
+    /**
+     * <code>.context.LinkId link_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
+      return getLinkId();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (linkId_ != null) {
+        output.writeMessage(2, getLinkId());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (event_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getEvent());
+      }
+      if (linkId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getLinkId());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.LinkEvent)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.LinkEvent other = (context.ContextOuterClass.LinkEvent) obj;
+
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasLinkId() != other.hasLinkId()) return false;
+      if (hasLinkId()) {
+        if (!getLinkId()
+            .equals(other.getLinkId())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (hasLinkId()) {
+        hash = (37 * hash) + LINK_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getLinkId().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.LinkEvent parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.LinkEvent parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkEvent parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.LinkEvent parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkEvent parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.LinkEvent parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkEvent parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkEvent parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkEvent parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkEvent parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkEvent parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkEvent parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.LinkEvent prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.LinkEvent}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.LinkEvent)
+        context.ContextOuterClass.LinkEventOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_LinkEvent_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_LinkEvent_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.LinkEvent.class, context.ContextOuterClass.LinkEvent.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.LinkEvent.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getLinkIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (eventBuilder_ == null) {
+          event_ = null;
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (linkIdBuilder_ == null) {
+          linkId_ = null;
+        } else {
+          linkId_ = null;
+          linkIdBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_LinkEvent_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.LinkEvent.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkEvent build() {
+        context.ContextOuterClass.LinkEvent result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkEvent buildPartial() {
+        context.ContextOuterClass.LinkEvent result = new context.ContextOuterClass.LinkEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
+        } else {
+          result.event_ = eventBuilder_.build();
+        }
+        if (linkIdBuilder_ == null) {
+          result.linkId_ = linkId_;
+        } else {
+          result.linkId_ = linkIdBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.LinkEvent) {
+          return mergeFrom((context.ContextOuterClass.LinkEvent)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.LinkEvent other) {
+        if (other == context.ContextOuterClass.LinkEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (other.hasLinkId()) {
+          mergeLinkId(other.getLinkId());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.LinkEvent parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.LinkEvent) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.LinkId> linkIds_ =
+        java.util.Collections.emptyList();
+      private void ensureLinkIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>(linkIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdsBuilder_;
+
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
+        if (linkIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(linkIds_);
+        } else {
+          return linkIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</code>
+       */
+      public int getLinkIdsCount() {
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.size();
+        } else {
+          return linkIdsBuilder_.getCount();
+        }
+        return eventBuilder_;
+      }
+
+      private context.ContextOuterClass.LinkId linkId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdBuilder_;
+      /**
+       * <code>.context.LinkId link_id = 2;</code>
+       * @return Whether the linkId field is set.
+       */
+      public boolean hasLinkId() {
+        return linkIdBuilder_ != null || linkId_ != null;
+      }
+      /**
+       * <code>.context.LinkId link_id = 2;</code>
+       * @return The linkId.
+       */
+      public context.ContextOuterClass.LinkId getLinkId() {
+        if (linkIdBuilder_ == null) {
+          return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
+        } else {
+          return linkIdBuilder_.getMessage();
+        }
+        return this;
+      }
+      /**
+       * <code>.context.LinkId link_id = 2;</code>
+       */
+      public Builder setLinkId(context.ContextOuterClass.LinkId value) {
+        if (linkIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          linkId_ = value;
+          onChanged();
+        } else {
+          linkIdBuilder_.setMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>.context.LinkId link_id = 2;</code>
+       */
+      public Builder setLinkId(
+          context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdBuilder_ == null) {
+          linkId_ = builderForValue.build();
+          onChanged();
+        } else {
+          linkIdBuilder_.setMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>.context.LinkId link_id = 2;</code>
+       */
+      public Builder mergeLinkId(context.ContextOuterClass.LinkId value) {
+        if (linkIdBuilder_ == null) {
+          if (linkId_ != null) {
+            linkId_ =
+              context.ContextOuterClass.LinkId.newBuilder(linkId_).mergeFrom(value).buildPartial();
+          } else {
+            linkId_ = value;
+          }
+          onChanged();
+        } else {
+          linkIdBuilder_.mergeFrom(value);
+        }
+        return this;
+      }
+      /**
+       * <code>.context.LinkId link_id = 2;</code>
+       */
+      public Builder clearLinkId() {
+        if (linkIdBuilder_ == null) {
+          linkId_ = null;
+          onChanged();
+        } else {
+          linkId_ = null;
+          linkIdBuilder_ = null;
+        }
+        return this;
+      }
+      /**
+       * <code>.context.LinkId link_id = 2;</code>
+       */
+      public context.ContextOuterClass.LinkId.Builder getLinkIdBuilder() {
+        
+        onChanged();
+        return getLinkIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.LinkId link_id = 2;</code>
+       */
+      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
+        if (linkIdBuilder_ != null) {
+          return linkIdBuilder_.getMessageOrBuilder();
+        } else {
+          return linkId_ == null ?
+              context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
+        }
+      }
+      /**
+       * <code>.context.LinkId link_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
+          getLinkIdFieldBuilder() {
+        if (linkIdBuilder_ == null) {
+          linkIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
+                  getLinkId(),
+                  getParentForChildren(),
+                  isClean());
+          linkId_ = null;
+        }
+        return linkIdBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.LinkEvent)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.LinkEvent)
+    private static final context.ContextOuterClass.LinkEvent DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkEvent();
+    }
+
+    public static context.ContextOuterClass.LinkEvent getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<LinkEvent>
+        PARSER = new com.google.protobuf.AbstractParser<LinkEvent>() {
+      @java.lang.Override
+      public LinkEvent parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new LinkEvent(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<LinkEvent> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<LinkEvent> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.LinkEvent getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ServiceIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceId)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
+     */
+    boolean hasContextId();
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
+     */
+    context.ContextOuterClass.ContextId getContextId();
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     */
+    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
+
+    /**
+     * <code>.context.Uuid service_uuid = 2;</code>
+     * @return Whether the serviceUuid field is set.
+     */
+    boolean hasServiceUuid();
+    /**
+     * <code>.context.Uuid service_uuid = 2;</code>
+     * @return The serviceUuid.
+     */
+    context.ContextOuterClass.Uuid getServiceUuid();
+    /**
+     * <code>.context.Uuid service_uuid = 2;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder();
+  }
+  /**
+   * <pre>
+   * ----- Service -------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.ServiceId}
+   */
+  public static final class ServiceId extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ServiceId)
+      ServiceIdOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ServiceId.newBuilder() to construct.
+    private ServiceId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ServiceId() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ServiceId();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ServiceId(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.ContextId.Builder subBuilder = null;
+              if (contextId_ != null) {
+                subBuilder = contextId_.toBuilder();
+              }
+              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(contextId_);
+                contextId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (serviceUuid_ != null) {
+                subBuilder = serviceUuid_.toBuilder();
+              }
+              serviceUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceUuid_);
+                serviceUuid_ = subBuilder.buildPartial();
+              }
+              links_.add(
+                  input.readMessage(context.ContextOuterClass.Link.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          links_ = java.util.Collections.unmodifiableList(links_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ServiceId_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ServiceId_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ServiceId.class, context.ContextOuterClass.ServiceId.Builder.class);
+    }
+
+    public static final int CONTEXT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ContextId contextId_;
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
+     */
+    @java.lang.Override
+    public boolean hasContextId() {
+      return contextId_ != null;
+    }
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextId getContextId() {
+      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+    }
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+      return getContextId();
+    }
+
+    public static final int SERVICE_UUID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.Uuid serviceUuid_;
+    /**
+     * <code>.context.Uuid service_uuid = 2;</code>
+     * @return Whether the serviceUuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceUuid() {
+      return serviceUuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid service_uuid = 2;</code>
+     * @return The serviceUuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getServiceUuid() {
+      return serviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : serviceUuid_;
+    }
+    /**
+     * <code>.context.Uuid service_uuid = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder() {
+      return getServiceUuid();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (contextId_ != null) {
+        output.writeMessage(1, getContextId());
+      }
+      if (serviceUuid_ != null) {
+        output.writeMessage(2, getServiceUuid());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (contextId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getContextId());
+      }
+      if (serviceUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getServiceUuid());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ServiceId)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ServiceId other = (context.ContextOuterClass.ServiceId) obj;
+
+      if (hasContextId() != other.hasContextId()) return false;
+      if (hasContextId()) {
+        if (!getContextId()
+            .equals(other.getContextId())) return false;
+      }
+      if (hasServiceUuid() != other.hasServiceUuid()) return false;
+      if (hasServiceUuid()) {
+        if (!getServiceUuid()
+            .equals(other.getServiceUuid())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasContextId()) {
+        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getContextId().hashCode();
+      }
+      if (hasServiceUuid()) {
+        hash = (37 * hash) + SERVICE_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceUuid().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ServiceId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceId parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceId parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceId parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceId parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceId parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceId parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ServiceId prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * ----- Service -------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.ServiceId}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ServiceId)
+        context.ContextOuterClass.ServiceIdOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ServiceId_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ServiceId_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ServiceId.class, context.ContextOuterClass.ServiceId.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ServiceId.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getLinksFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+        if (serviceUuidBuilder_ == null) {
+          serviceUuid_ = null;
+        } else {
+          serviceUuid_ = null;
+          serviceUuidBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ServiceId_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceId getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceId.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceId build() {
+        context.ContextOuterClass.ServiceId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceId buildPartial() {
+        context.ContextOuterClass.ServiceId result = new context.ContextOuterClass.ServiceId(this);
+        if (contextIdBuilder_ == null) {
+          result.contextId_ = contextId_;
+        } else {
+          result.contextId_ = contextIdBuilder_.build();
+        }
+        if (serviceUuidBuilder_ == null) {
+          result.serviceUuid_ = serviceUuid_;
+        } else {
+          result.serviceUuid_ = serviceUuidBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ServiceId) {
+          return mergeFrom((context.ContextOuterClass.ServiceId)other);
+        } else {
+          return linksBuilder_.getCount();
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ServiceId other) {
+        if (other == context.ContextOuterClass.ServiceId.getDefaultInstance()) return this;
+        if (other.hasContextId()) {
+          mergeContextId(other.getContextId());
+        }
+        if (other.hasServiceUuid()) {
+          mergeServiceUuid(other.getServiceUuid());
+        }
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ServiceId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ServiceId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+          ensureLinksIsMutable();
+          links_.set(index, value);
+          onChanged();
+        } else {
+          linksBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.ContextId contextId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return Whether the contextId field is set.
+       */
+      public boolean hasContextId() {
+        return contextIdBuilder_ != null || contextId_ != null;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return The contextId.
+       */
+      public context.ContextOuterClass.ContextId getContextId() {
+        if (contextIdBuilder_ == null) {
+          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        } else {
+          return contextIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder setContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          contextId_ = value;
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder setContextId(
+          context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdBuilder_ == null) {
+          contextId_ = builderForValue.build();
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (contextId_ != null) {
+            contextId_ =
+              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+          } else {
+            contextId_ = value;
+          }
+          onChanged();
+        } else {
+          contextIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder clearContextId() {
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+          onChanged();
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+        
+        onChanged();
+        return getContextIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+        if (contextIdBuilder_ != null) {
+          return contextIdBuilder_.getMessageOrBuilder();
+        } else {
+          return contextId_ == null ?
+              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
+          getContextIdFieldBuilder() {
+        if (contextIdBuilder_ == null) {
+          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
+                  getContextId(),
+                  getParentForChildren(),
+                  isClean());
+          contextId_ = null;
+        }
+        return contextIdBuilder_;
+      }
+
+      private context.ContextOuterClass.Uuid serviceUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> serviceUuidBuilder_;
+      /**
+       * <code>.context.Uuid service_uuid = 2;</code>
+       * @return Whether the serviceUuid field is set.
+       */
+      public boolean hasServiceUuid() {
+        return serviceUuidBuilder_ != null || serviceUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid service_uuid = 2;</code>
+       * @return The serviceUuid.
+       */
+      public context.ContextOuterClass.Uuid getServiceUuid() {
+        if (serviceUuidBuilder_ == null) {
+          return serviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : serviceUuid_;
+        } else {
+          return serviceUuidBuilder_.getMessage();
+        }
+        return this;
+      }
+      /**
+       * <code>.context.Uuid service_uuid = 2;</code>
+       */
+      public Builder setServiceUuid(context.ContextOuterClass.Uuid value) {
+        if (serviceUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceUuid_ = value;
+          onChanged();
+        } else {
+          serviceUuidBuilder_.setMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>.context.Uuid service_uuid = 2;</code>
+       */
+      public Builder setServiceUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (serviceUuidBuilder_ == null) {
+          serviceUuid_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceUuidBuilder_.setMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>.context.Uuid service_uuid = 2;</code>
+       */
+      public Builder mergeServiceUuid(context.ContextOuterClass.Uuid value) {
+        if (serviceUuidBuilder_ == null) {
+          if (serviceUuid_ != null) {
+            serviceUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(serviceUuid_).mergeFrom(value).buildPartial();
+          } else {
+            serviceUuid_ = value;
+          }
+          onChanged();
+        } else {
+          serviceUuidBuilder_.mergeFrom(value);
+        }
+        return this;
+      }
+      /**
+       * <code>.context.Uuid service_uuid = 2;</code>
+       */
+      public Builder clearServiceUuid() {
+        if (serviceUuidBuilder_ == null) {
+          serviceUuid_ = null;
+          onChanged();
+        } else {
+          serviceUuid_ = null;
+          serviceUuidBuilder_ = null;
+        }
+        return this;
+      }
+      /**
+       * <code>.context.Uuid service_uuid = 2;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getServiceUuidBuilder() {
+        
+        onChanged();
+        return getServiceUuidFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid service_uuid = 2;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder() {
+        if (serviceUuidBuilder_ != null) {
+          return serviceUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : serviceUuid_;
+        }
+        return this;
+      }
+      /**
+       * <code>.context.Uuid service_uuid = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getServiceUuidFieldBuilder() {
+        if (serviceUuidBuilder_ == null) {
+          serviceUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getServiceUuid(),
+                  getParentForChildren(),
+                  isClean());
+          serviceUuid_ = null;
+        }
+        return serviceUuidBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ServiceId)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ServiceId)
+    private static final context.ContextOuterClass.ServiceId DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceId();
+    }
+
+    public static context.ContextOuterClass.ServiceId getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ServiceId>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceId>() {
+      @java.lang.Override
+      public ServiceId parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ServiceId(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ServiceId> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ServiceId> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ServiceOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Service)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.ServiceId service_id = 1;</code>
+     * @return Whether the serviceId field is set.
+     */
+    boolean hasServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 1;</code>
+     * @return The serviceId.
+     */
+    context.ContextOuterClass.ServiceId getServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 1;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+
+    /**
+     * <code>string name = 2;</code>
+     * @return The name.
+     */
+    java.lang.String getName();
+    /**
+     * <code>string name = 2;</code>
+     * @return The bytes for name.
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+
+    /**
+     * <code>.context.ServiceTypeEnum service_type = 3;</code>
+     * @return The enum numeric value on the wire for serviceType.
+     */
+    int getServiceTypeValue();
+    /**
+     * <code>.context.ServiceTypeEnum service_type = 3;</code>
+     * @return The serviceType.
+     */
+    context.ContextOuterClass.ServiceTypeEnum getServiceType();
+
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+     */
+    java.util.List<context.ContextOuterClass.EndPointId> 
+        getServiceEndpointIdsList();
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+     */
+    context.ContextOuterClass.EndPointId getServiceEndpointIds(int index);
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+     */
+    int getServiceEndpointIdsCount();
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getServiceEndpointIdsOrBuilderList();
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getServiceEndpointIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.Constraint service_constraints = 5;</code>
+     */
+    java.util.List<context.ContextOuterClass.Constraint> 
+        getServiceConstraintsList();
+    /**
+     * <code>repeated .context.Constraint service_constraints = 5;</code>
+     */
+    context.ContextOuterClass.Constraint getServiceConstraints(int index);
+    /**
+     * <code>repeated .context.Constraint service_constraints = 5;</code>
+     */
+    int getServiceConstraintsCount();
+    /**
+     * <code>repeated .context.Constraint service_constraints = 5;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
+        getServiceConstraintsOrBuilderList();
+    /**
+     * <code>repeated .context.Constraint service_constraints = 5;</code>
+     */
+    context.ContextOuterClass.ConstraintOrBuilder getServiceConstraintsOrBuilder(
+        int index);
+
+    /**
+     * <code>.context.ServiceStatus service_status = 6;</code>
+     * @return Whether the serviceStatus field is set.
+     */
+    boolean hasServiceStatus();
+    /**
+     * <code>.context.ServiceStatus service_status = 6;</code>
+     * @return The serviceStatus.
+     */
+    context.ContextOuterClass.ServiceStatus getServiceStatus();
+    /**
+     * <code>.context.ServiceStatus service_status = 6;</code>
+     */
+    context.ContextOuterClass.ServiceStatusOrBuilder getServiceStatusOrBuilder();
+
+    /**
+     * <code>.context.ServiceConfig service_config = 7;</code>
+     * @return Whether the serviceConfig field is set.
+     */
+    boolean hasServiceConfig();
+    /**
+     * <code>.context.ServiceConfig service_config = 7;</code>
+     * @return The serviceConfig.
+     */
+    context.ContextOuterClass.ServiceConfig getServiceConfig();
+    /**
+     * <code>.context.ServiceConfig service_config = 7;</code>
+     */
+    context.ContextOuterClass.ServiceConfigOrBuilder getServiceConfigOrBuilder();
+
+    /**
+     * <code>.context.Timestamp timestamp = 8;</code>
+     * @return Whether the timestamp field is set.
+     */
+    boolean hasTimestamp();
+    /**
+     * <code>.context.Timestamp timestamp = 8;</code>
+     * @return The timestamp.
+     */
+    context.ContextOuterClass.Timestamp getTimestamp();
+    /**
+     * <code>.context.Timestamp timestamp = 8;</code>
+     */
+    context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder();
+  }
+  /**
+   * Protobuf type {@code context.Service}
+   */
+  public static final class Service extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Service)
+      ServiceOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Service.newBuilder() to construct.
+    private Service(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Service() {
+      name_ = "";
+      serviceType_ = 0;
+      serviceEndpointIds_ = java.util.Collections.emptyList();
+      serviceConstraints_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Service();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Service(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
+              if (serviceId_ != null) {
+                subBuilder = serviceId_.toBuilder();
+              }
+              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceId_);
+                serviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              name_ = s;
+              break;
+            }
+            case 24: {
+              int rawValue = input.readEnum();
+
+              serviceType_ = rawValue;
+              break;
+            }
+            case 34: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                serviceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              serviceEndpointIds_.add(
+                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
+              break;
+            }
+            case 42: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                serviceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              serviceConstraints_.add(
+                  input.readMessage(context.ContextOuterClass.Constraint.parser(), extensionRegistry));
+              break;
+            }
+            case 50: {
+              context.ContextOuterClass.ServiceStatus.Builder subBuilder = null;
+              if (serviceStatus_ != null) {
+                subBuilder = serviceStatus_.toBuilder();
+              }
+              serviceStatus_ = input.readMessage(context.ContextOuterClass.ServiceStatus.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceStatus_);
+                serviceStatus_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 58: {
+              context.ContextOuterClass.ServiceConfig.Builder subBuilder = null;
+              if (serviceConfig_ != null) {
+                subBuilder = serviceConfig_.toBuilder();
+              }
+              serviceConfig_ = input.readMessage(context.ContextOuterClass.ServiceConfig.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceConfig_);
+                serviceConfig_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 66: {
+              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
+              if (timestamp_ != null) {
+                subBuilder = timestamp_.toBuilder();
+              }
+              timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(timestamp_);
+                timestamp_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          serviceEndpointIds_ = java.util.Collections.unmodifiableList(serviceEndpointIds_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          serviceConstraints_ = java.util.Collections.unmodifiableList(serviceConstraints_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Service_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Service_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Service.class, context.ContextOuterClass.Service.Builder.class);
+    }
+
+    public static final int SERVICE_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ServiceId serviceId_;
+    /**
+     * <code>.context.ServiceId service_id = 1;</code>
+     * @return Whether the serviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceId() {
+      return serviceId_ != null;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 1;</code>
+     * @return The serviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getServiceId() {
+      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+      return getServiceId();
+    }
+
+    public static final int NAME_FIELD_NUMBER = 2;
+    private volatile java.lang.Object name_;
+    /**
+     * <code>string name = 2;</code>
+     * @return The name.
+     */
+    @java.lang.Override
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        name_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string name = 2;</code>
+     * @return The bytes for name.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int SERVICE_TYPE_FIELD_NUMBER = 3;
+    private int serviceType_;
+    /**
+     * <code>.context.ServiceTypeEnum service_type = 3;</code>
+     * @return The enum numeric value on the wire for serviceType.
+     */
+    @java.lang.Override public int getServiceTypeValue() {
+      return serviceType_;
+    }
+    /**
+     * <code>.context.ServiceTypeEnum service_type = 3;</code>
+     * @return The serviceType.
+     */
+    @java.lang.Override public context.ContextOuterClass.ServiceTypeEnum getServiceType() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.ServiceTypeEnum result = context.ContextOuterClass.ServiceTypeEnum.valueOf(serviceType_);
+      return result == null ? context.ContextOuterClass.ServiceTypeEnum.UNRECOGNIZED : result;
+    }
+
+    public static final int SERVICE_ENDPOINT_IDS_FIELD_NUMBER = 4;
+    private java.util.List<context.ContextOuterClass.EndPointId> serviceEndpointIds_;
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.EndPointId> getServiceEndpointIdsList() {
+      return serviceEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getServiceEndpointIdsOrBuilderList() {
+      return serviceEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+     */
+    @java.lang.Override
+    public int getServiceEndpointIdsCount() {
+      return serviceEndpointIds_.size();
+    }
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getServiceEndpointIds(int index) {
+      return serviceEndpointIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getServiceEndpointIdsOrBuilder(
+        int index) {
+      return serviceEndpointIds_.get(index);
+    }
+
+    public static final int SERVICE_CONSTRAINTS_FIELD_NUMBER = 5;
+    private java.util.List<context.ContextOuterClass.Constraint> serviceConstraints_;
+    /**
+     * <code>repeated .context.Constraint service_constraints = 5;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.Constraint> getServiceConstraintsList() {
+      return serviceConstraints_;
+    }
+    /**
+     * <code>repeated .context.Constraint service_constraints = 5;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
+        getServiceConstraintsOrBuilderList() {
+      return serviceConstraints_;
+    }
+    /**
+     * <code>repeated .context.Constraint service_constraints = 5;</code>
+     */
+    @java.lang.Override
+    public int getServiceConstraintsCount() {
+      return serviceConstraints_.size();
+    }
+    /**
+     * <code>repeated .context.Constraint service_constraints = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint getServiceConstraints(int index) {
+      return serviceConstraints_.get(index);
+    }
+    /**
+     * <code>repeated .context.Constraint service_constraints = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConstraintOrBuilder getServiceConstraintsOrBuilder(
+        int index) {
+      return serviceConstraints_.get(index);
+    }
+
+    public static final int SERVICE_STATUS_FIELD_NUMBER = 6;
+    private context.ContextOuterClass.ServiceStatus serviceStatus_;
+    /**
+     * <code>.context.ServiceStatus service_status = 6;</code>
+     * @return Whether the serviceStatus field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceStatus() {
+      return serviceStatus_ != null;
+    }
+    /**
+     * <code>.context.ServiceStatus service_status = 6;</code>
+     * @return The serviceStatus.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceStatus getServiceStatus() {
+      return serviceStatus_ == null ? context.ContextOuterClass.ServiceStatus.getDefaultInstance() : serviceStatus_;
+    }
+    /**
+     * <code>.context.ServiceStatus service_status = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceStatusOrBuilder getServiceStatusOrBuilder() {
+      return getServiceStatus();
+    }
+
+    public static final int SERVICE_CONFIG_FIELD_NUMBER = 7;
+    private context.ContextOuterClass.ServiceConfig serviceConfig_;
+    /**
+     * <code>.context.ServiceConfig service_config = 7;</code>
+     * @return Whether the serviceConfig field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceConfig() {
+      return serviceConfig_ != null;
+    }
+    /**
+     * <code>.context.ServiceConfig service_config = 7;</code>
+     * @return The serviceConfig.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceConfig getServiceConfig() {
+      return serviceConfig_ == null ? context.ContextOuterClass.ServiceConfig.getDefaultInstance() : serviceConfig_;
+    }
+    /**
+     * <code>.context.ServiceConfig service_config = 7;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceConfigOrBuilder getServiceConfigOrBuilder() {
+      return getServiceConfig();
+    }
+
+    public static final int TIMESTAMP_FIELD_NUMBER = 8;
+    private context.ContextOuterClass.Timestamp timestamp_;
+    /**
+     * <code>.context.Timestamp timestamp = 8;</code>
+     * @return Whether the timestamp field is set.
+     */
+    @java.lang.Override
+    public boolean hasTimestamp() {
+      return timestamp_ != null;
+    }
+    /**
+     * <code>.context.Timestamp timestamp = 8;</code>
+     * @return The timestamp.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Timestamp getTimestamp() {
+      return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+    }
+    /**
+     * <code>.context.Timestamp timestamp = 8;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
+      return getTimestamp();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (serviceId_ != null) {
+        output.writeMessage(1, getServiceId());
+      }
+      if (!getNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
+      }
+      if (serviceType_ != context.ContextOuterClass.ServiceTypeEnum.SERVICETYPE_UNKNOWN.getNumber()) {
+        output.writeEnum(3, serviceType_);
+      }
+      for (int i = 0; i < serviceEndpointIds_.size(); i++) {
+        output.writeMessage(4, serviceEndpointIds_.get(i));
+      }
+      for (int i = 0; i < serviceConstraints_.size(); i++) {
+        output.writeMessage(5, serviceConstraints_.get(i));
+      }
+      if (serviceStatus_ != null) {
+        output.writeMessage(6, getServiceStatus());
+      }
+      if (serviceConfig_ != null) {
+        output.writeMessage(7, getServiceConfig());
+      }
+      if (timestamp_ != null) {
+        output.writeMessage(8, getTimestamp());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (serviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getServiceId());
+      }
+      if (!getNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
+      }
+      if (serviceType_ != context.ContextOuterClass.ServiceTypeEnum.SERVICETYPE_UNKNOWN.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(3, serviceType_);
+      }
+      for (int i = 0; i < serviceEndpointIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, serviceEndpointIds_.get(i));
+      }
+      for (int i = 0; i < serviceConstraints_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, serviceConstraints_.get(i));
+      }
+      if (serviceStatus_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, getServiceStatus());
+      }
+      if (serviceConfig_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(7, getServiceConfig());
+      }
+      if (timestamp_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(8, getTimestamp());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.Service)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Service other = (context.ContextOuterClass.Service) obj;
+
+      if (hasServiceId() != other.hasServiceId()) return false;
+      if (hasServiceId()) {
+        if (!getServiceId()
+            .equals(other.getServiceId())) return false;
+      }
+      if (!getName()
+          .equals(other.getName())) return false;
+      if (serviceType_ != other.serviceType_) return false;
+      if (!getServiceEndpointIdsList()
+          .equals(other.getServiceEndpointIdsList())) return false;
+      if (!getServiceConstraintsList()
+          .equals(other.getServiceConstraintsList())) return false;
+      if (hasServiceStatus() != other.hasServiceStatus()) return false;
+      if (hasServiceStatus()) {
+        if (!getServiceStatus()
+            .equals(other.getServiceStatus())) return false;
+      }
+      if (hasServiceConfig() != other.hasServiceConfig()) return false;
+      if (hasServiceConfig()) {
+        if (!getServiceConfig()
+            .equals(other.getServiceConfig())) return false;
+      }
+      if (hasTimestamp() != other.hasTimestamp()) return false;
+      if (hasTimestamp()) {
+        if (!getTimestamp()
+            .equals(other.getTimestamp())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasServiceId()) {
+        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceId().hashCode();
+      }
+      hash = (37 * hash) + NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getName().hashCode();
+      hash = (37 * hash) + SERVICE_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + serviceType_;
+      if (getServiceEndpointIdsCount() > 0) {
+        hash = (37 * hash) + SERVICE_ENDPOINT_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceEndpointIdsList().hashCode();
+      }
+      if (getServiceConstraintsCount() > 0) {
+        hash = (37 * hash) + SERVICE_CONSTRAINTS_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceConstraintsList().hashCode();
+      }
+      if (hasServiceStatus()) {
+        hash = (37 * hash) + SERVICE_STATUS_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceStatus().hashCode();
+      }
+      if (hasServiceConfig()) {
+        hash = (37 * hash) + SERVICE_CONFIG_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceConfig().hashCode();
+      }
+      if (hasTimestamp()) {
+        hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
+        hash = (53 * hash) + getTimestamp().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Service parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Service parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Service parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Service parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Service parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Service parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Service parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Service parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Service parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Service parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Service parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Service parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.Service prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.Service}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Service)
+        context.ContextOuterClass.ServiceOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Service_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Service_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Service.class, context.ContextOuterClass.Service.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Service.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getServiceEndpointIdsFieldBuilder();
+          getServiceConstraintsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+        name_ = "";
+
+        serviceType_ = 0;
+
+        if (serviceEndpointIdsBuilder_ == null) {
+          serviceEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          serviceEndpointIdsBuilder_.clear();
+        }
+        if (serviceConstraintsBuilder_ == null) {
+          serviceConstraints_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          serviceConstraintsBuilder_.clear();
+        }
+        if (serviceStatusBuilder_ == null) {
+          serviceStatus_ = null;
+        } else {
+          serviceStatus_ = null;
+          serviceStatusBuilder_ = null;
+        }
+        if (serviceConfigBuilder_ == null) {
+          serviceConfig_ = null;
+        } else {
+          serviceConfig_ = null;
+          serviceConfigBuilder_ = null;
+        }
+        if (timestampBuilder_ == null) {
+          timestamp_ = null;
+        } else {
+          timestamp_ = null;
+          timestampBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Service_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Service getDefaultInstanceForType() {
+        return context.ContextOuterClass.Service.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Service build() {
+        context.ContextOuterClass.Service result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Service buildPartial() {
+        context.ContextOuterClass.Service result = new context.ContextOuterClass.Service(this);
+        int from_bitField0_ = bitField0_;
+        if (serviceIdBuilder_ == null) {
+          result.serviceId_ = serviceId_;
+        } else {
+          result.serviceId_ = serviceIdBuilder_.build();
+        }
+        result.name_ = name_;
+        result.serviceType_ = serviceType_;
+        if (serviceEndpointIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            serviceEndpointIds_ = java.util.Collections.unmodifiableList(serviceEndpointIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.serviceEndpointIds_ = serviceEndpointIds_;
+        } else {
+          result.serviceEndpointIds_ = serviceEndpointIdsBuilder_.build();
+        }
+        if (serviceConstraintsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            serviceConstraints_ = java.util.Collections.unmodifiableList(serviceConstraints_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.serviceConstraints_ = serviceConstraints_;
+        } else {
+          result.serviceConstraints_ = serviceConstraintsBuilder_.build();
+        }
+        if (serviceStatusBuilder_ == null) {
+          result.serviceStatus_ = serviceStatus_;
+        } else {
+          result.serviceStatus_ = serviceStatusBuilder_.build();
+        }
+        if (serviceConfigBuilder_ == null) {
+          result.serviceConfig_ = serviceConfig_;
+        } else {
+          result.serviceConfig_ = serviceConfigBuilder_.build();
+        }
+        if (timestampBuilder_ == null) {
+          result.timestamp_ = timestamp_;
+        } else {
+          result.timestamp_ = timestampBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Service) {
+          return mergeFrom((context.ContextOuterClass.Service)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Service other) {
+        if (other == context.ContextOuterClass.Service.getDefaultInstance()) return this;
+        if (other.hasServiceId()) {
+          mergeServiceId(other.getServiceId());
+        }
+        if (!other.getName().isEmpty()) {
+          name_ = other.name_;
+          onChanged();
+        }
+        if (other.serviceType_ != 0) {
+          setServiceTypeValue(other.getServiceTypeValue());
+        }
+        if (serviceEndpointIdsBuilder_ == null) {
+          if (!other.serviceEndpointIds_.isEmpty()) {
+            if (serviceEndpointIds_.isEmpty()) {
+              serviceEndpointIds_ = other.serviceEndpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureServiceEndpointIdsIsMutable();
+              serviceEndpointIds_.addAll(other.serviceEndpointIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.serviceEndpointIds_.isEmpty()) {
+            if (serviceEndpointIdsBuilder_.isEmpty()) {
+              serviceEndpointIdsBuilder_.dispose();
+              serviceEndpointIdsBuilder_ = null;
+              serviceEndpointIds_ = other.serviceEndpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              serviceEndpointIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getServiceEndpointIdsFieldBuilder() : null;
+            } else {
+              serviceEndpointIdsBuilder_.addAllMessages(other.serviceEndpointIds_);
+            }
+          }
+        }
+        if (serviceConstraintsBuilder_ == null) {
+          if (!other.serviceConstraints_.isEmpty()) {
+            if (serviceConstraints_.isEmpty()) {
+              serviceConstraints_ = other.serviceConstraints_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureServiceConstraintsIsMutable();
+              serviceConstraints_.addAll(other.serviceConstraints_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.serviceConstraints_.isEmpty()) {
+            if (serviceConstraintsBuilder_.isEmpty()) {
+              serviceConstraintsBuilder_.dispose();
+              serviceConstraintsBuilder_ = null;
+              serviceConstraints_ = other.serviceConstraints_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              serviceConstraintsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getServiceConstraintsFieldBuilder() : null;
+            } else {
+              serviceConstraintsBuilder_.addAllMessages(other.serviceConstraints_);
+            }
+          }
+        }
+        if (other.hasServiceStatus()) {
+          mergeServiceStatus(other.getServiceStatus());
+        }
+        if (other.hasServiceConfig()) {
+          mergeServiceConfig(other.getServiceConfig());
+        }
+        if (other.hasTimestamp()) {
+          mergeTimestamp(other.getTimestamp());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Service parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Service) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.ServiceId serviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       * @return Whether the serviceId field is set.
+       */
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       * @return The serviceId.
+       */
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        } else {
+          return serviceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       */
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceId_ = value;
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       */
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       */
+      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (serviceId_ != null) {
+            serviceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+          } else {
+            serviceId_ = value;
+          }
+          onChanged();
+        } else {
+          serviceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       */
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+          onChanged();
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+        
+        onChanged();
+        return getServiceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getServiceId(),
+                  getParentForChildren(),
+                  isClean());
+          serviceId_ = null;
+        }
+        return serviceIdBuilder_;
+      }
+
+      private java.lang.Object name_ = "";
+      /**
+       * <code>string name = 2;</code>
+       * @return The name.
+       */
+      public java.lang.String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          name_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @return The bytes for name.
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @param value The name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @param value The bytes for name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        name_ = value;
+        onChanged();
+        return this;
+      }
+
+      private int serviceType_ = 0;
+      /**
+       * <code>.context.ServiceTypeEnum service_type = 3;</code>
+       * @return The enum numeric value on the wire for serviceType.
+       */
+      @java.lang.Override public int getServiceTypeValue() {
+        return serviceType_;
+      }
+      /**
+       * <code>.context.ServiceTypeEnum service_type = 3;</code>
+       * @param value The enum numeric value on the wire for serviceType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setServiceTypeValue(int value) {
+        
+        serviceType_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ServiceTypeEnum service_type = 3;</code>
+       * @return The serviceType.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceTypeEnum getServiceType() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.ServiceTypeEnum result = context.ContextOuterClass.ServiceTypeEnum.valueOf(serviceType_);
+        return result == null ? context.ContextOuterClass.ServiceTypeEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.context.ServiceTypeEnum service_type = 3;</code>
+       * @param value The serviceType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setServiceType(context.ContextOuterClass.ServiceTypeEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        serviceType_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ServiceTypeEnum service_type = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearServiceType() {
+        
+        serviceType_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<context.ContextOuterClass.EndPointId> serviceEndpointIds_ =
+        java.util.Collections.emptyList();
+      private void ensureServiceEndpointIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          serviceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(serviceEndpointIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> serviceEndpointIdsBuilder_;
+
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId> getServiceEndpointIdsList() {
+        if (serviceEndpointIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(serviceEndpointIds_);
+        } else {
+          return serviceEndpointIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+       */
+      public int getServiceEndpointIdsCount() {
+        if (serviceEndpointIdsBuilder_ == null) {
+          return serviceEndpointIds_.size();
+        } else {
+          return serviceEndpointIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+       */
+      public context.ContextOuterClass.EndPointId getServiceEndpointIds(int index) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          return serviceEndpointIds_.get(index);
+        } else {
+          return serviceEndpointIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+       */
+      public Builder setServiceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.set(index, value);
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+       */
+      public Builder setServiceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+       */
+      public Builder addServiceEndpointIds(context.ContextOuterClass.EndPointId value) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.add(value);
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.addMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+       */
+      public Builder addServiceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.add(index, value);
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+       */
+      public Builder addServiceEndpointIds(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+       */
+      public Builder addServiceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+       */
+      public Builder addAllServiceEndpointIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          ensureServiceEndpointIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, serviceEndpointIds_);
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+       */
+      public Builder clearServiceEndpointIds() {
+        if (serviceEndpointIdsBuilder_ == null) {
+          serviceEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.clear();
+        }
+
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+       */
+      public Builder removeServiceEndpointIds(int index) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.remove(index);
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.remove(index);
+        }
+
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getServiceEndpointIdsBuilder(
+          int index) {
+        return getServiceEndpointIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getServiceEndpointIdsOrBuilder(
+          int index) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          return serviceEndpointIds_.get(index);  } else {
+          return serviceEndpointIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+           getServiceEndpointIdsOrBuilderList() {
+        if (serviceEndpointIdsBuilder_ != null) {
+          return serviceEndpointIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(serviceEndpointIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addServiceEndpointIdsBuilder() {
+        return getServiceEndpointIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addServiceEndpointIdsBuilder(
+          int index) {
+        return getServiceEndpointIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
+           getServiceEndpointIdsBuilderList() {
+        return getServiceEndpointIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getServiceEndpointIdsFieldBuilder() {
+        if (serviceEndpointIdsBuilder_ == null) {
+          serviceEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  serviceEndpointIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          serviceEndpointIds_ = null;
+        }
+        return serviceEndpointIdsBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.Constraint> serviceConstraints_ =
+        java.util.Collections.emptyList();
+      private void ensureServiceConstraintsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          serviceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>(serviceConstraints_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> serviceConstraintsBuilder_;
+
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Constraint> getServiceConstraintsList() {
+        if (serviceConstraintsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(serviceConstraints_);
+        } else {
           return serviceConstraintsBuilder_.getMessageList();
         }
-      }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public int getServiceConstraintsCount() {
-        if (serviceConstraintsBuilder_ == null) {
-          return serviceConstraints_.size();
-        } else {
-          return serviceConstraintsBuilder_.getCount();
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public int getServiceConstraintsCount() {
+        if (serviceConstraintsBuilder_ == null) {
+          return serviceConstraints_.size();
+        } else {
+          return serviceConstraintsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public context.ContextOuterClass.Constraint getServiceConstraints(int index) {
+        if (serviceConstraintsBuilder_ == null) {
+          return serviceConstraints_.get(index);
+        } else {
+          return serviceConstraintsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public Builder setServiceConstraints(
+          int index, context.ContextOuterClass.Constraint value) {
+        if (serviceConstraintsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.set(index, value);
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public Builder setServiceConstraints(
+          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
+        if (serviceConstraintsBuilder_ == null) {
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public Builder addServiceConstraints(context.ContextOuterClass.Constraint value) {
+        if (serviceConstraintsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.add(value);
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public Builder addServiceConstraints(
+          int index, context.ContextOuterClass.Constraint value) {
+        if (serviceConstraintsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.add(index, value);
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public Builder addServiceConstraints(
+          context.ContextOuterClass.Constraint.Builder builderForValue) {
+        if (serviceConstraintsBuilder_ == null) {
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.add(builderForValue.build());
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public Builder addServiceConstraints(
+          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
+        if (serviceConstraintsBuilder_ == null) {
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public Builder addAllServiceConstraints(
+          java.lang.Iterable<? extends context.ContextOuterClass.Constraint> values) {
+        if (serviceConstraintsBuilder_ == null) {
+          ensureServiceConstraintsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, serviceConstraints_);
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public Builder clearServiceConstraints() {
+        if (serviceConstraintsBuilder_ == null) {
+          serviceConstraints_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public Builder removeServiceConstraints(int index) {
+        if (serviceConstraintsBuilder_ == null) {
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.remove(index);
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public context.ContextOuterClass.Constraint.Builder getServiceConstraintsBuilder(
+          int index) {
+        return getServiceConstraintsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public context.ContextOuterClass.ConstraintOrBuilder getServiceConstraintsOrBuilder(
+          int index) {
+        if (serviceConstraintsBuilder_ == null) {
+          return serviceConstraints_.get(index);  } else {
+          return serviceConstraintsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
+           getServiceConstraintsOrBuilderList() {
+        if (serviceConstraintsBuilder_ != null) {
+          return serviceConstraintsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(serviceConstraints_);
+        }
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public context.ContextOuterClass.Constraint.Builder addServiceConstraintsBuilder() {
+        return getServiceConstraintsFieldBuilder().addBuilder(
+            context.ContextOuterClass.Constraint.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public context.ContextOuterClass.Constraint.Builder addServiceConstraintsBuilder(
+          int index) {
+        return getServiceConstraintsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Constraint.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Constraint.Builder> 
+           getServiceConstraintsBuilderList() {
+        return getServiceConstraintsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> 
+          getServiceConstraintsFieldBuilder() {
+        if (serviceConstraintsBuilder_ == null) {
+          serviceConstraintsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder>(
+                  serviceConstraints_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          serviceConstraints_ = null;
+        }
+        return serviceConstraintsBuilder_;
+      }
+
+      private context.ContextOuterClass.ServiceStatus serviceStatus_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceStatus, context.ContextOuterClass.ServiceStatus.Builder, context.ContextOuterClass.ServiceStatusOrBuilder> serviceStatusBuilder_;
+      /**
+       * <code>.context.ServiceStatus service_status = 6;</code>
+       * @return Whether the serviceStatus field is set.
+       */
+      public boolean hasServiceStatus() {
+        return serviceStatusBuilder_ != null || serviceStatus_ != null;
+      }
+      /**
+       * <code>.context.ServiceStatus service_status = 6;</code>
+       * @return The serviceStatus.
+       */
+      public context.ContextOuterClass.ServiceStatus getServiceStatus() {
+        if (serviceStatusBuilder_ == null) {
+          return serviceStatus_ == null ? context.ContextOuterClass.ServiceStatus.getDefaultInstance() : serviceStatus_;
+        } else {
+          return serviceStatusBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ServiceStatus service_status = 6;</code>
+       */
+      public Builder setServiceStatus(context.ContextOuterClass.ServiceStatus value) {
+        if (serviceStatusBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceStatus_ = value;
+          onChanged();
+        } else {
+          serviceStatusBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceStatus service_status = 6;</code>
+       */
+      public Builder setServiceStatus(
+          context.ContextOuterClass.ServiceStatus.Builder builderForValue) {
+        if (serviceStatusBuilder_ == null) {
+          serviceStatus_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceStatusBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceStatus service_status = 6;</code>
+       */
+      public Builder mergeServiceStatus(context.ContextOuterClass.ServiceStatus value) {
+        if (serviceStatusBuilder_ == null) {
+          if (serviceStatus_ != null) {
+            serviceStatus_ =
+              context.ContextOuterClass.ServiceStatus.newBuilder(serviceStatus_).mergeFrom(value).buildPartial();
+          } else {
+            serviceStatus_ = value;
+          }
+          onChanged();
+        } else {
+          serviceStatusBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceStatus service_status = 6;</code>
+       */
+      public Builder clearServiceStatus() {
+        if (serviceStatusBuilder_ == null) {
+          serviceStatus_ = null;
+          onChanged();
+        } else {
+          serviceStatus_ = null;
+          serviceStatusBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceStatus service_status = 6;</code>
+       */
+      public context.ContextOuterClass.ServiceStatus.Builder getServiceStatusBuilder() {
+        
+        onChanged();
+        return getServiceStatusFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceStatus service_status = 6;</code>
+       */
+      public context.ContextOuterClass.ServiceStatusOrBuilder getServiceStatusOrBuilder() {
+        if (serviceStatusBuilder_ != null) {
+          return serviceStatusBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceStatus_ == null ?
+              context.ContextOuterClass.ServiceStatus.getDefaultInstance() : serviceStatus_;
+        }
+      }
+      /**
+       * <code>.context.ServiceStatus service_status = 6;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceStatus, context.ContextOuterClass.ServiceStatus.Builder, context.ContextOuterClass.ServiceStatusOrBuilder> 
+          getServiceStatusFieldBuilder() {
+        if (serviceStatusBuilder_ == null) {
+          serviceStatusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceStatus, context.ContextOuterClass.ServiceStatus.Builder, context.ContextOuterClass.ServiceStatusOrBuilder>(
+                  getServiceStatus(),
+                  getParentForChildren(),
+                  isClean());
+          serviceStatus_ = null;
+        }
+        return serviceStatusBuilder_;
+      }
+
+      private context.ContextOuterClass.ServiceConfig serviceConfig_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceConfig, context.ContextOuterClass.ServiceConfig.Builder, context.ContextOuterClass.ServiceConfigOrBuilder> serviceConfigBuilder_;
+      /**
+       * <code>.context.ServiceConfig service_config = 7;</code>
+       * @return Whether the serviceConfig field is set.
+       */
+      public boolean hasServiceConfig() {
+        return serviceConfigBuilder_ != null || serviceConfig_ != null;
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 7;</code>
+       * @return The serviceConfig.
+       */
+      public context.ContextOuterClass.ServiceConfig getServiceConfig() {
+        if (serviceConfigBuilder_ == null) {
+          return serviceConfig_ == null ? context.ContextOuterClass.ServiceConfig.getDefaultInstance() : serviceConfig_;
+        } else {
+          return serviceConfigBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 7;</code>
+       */
+      public Builder setServiceConfig(context.ContextOuterClass.ServiceConfig value) {
+        if (serviceConfigBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceConfig_ = value;
+          onChanged();
+        } else {
+          serviceConfigBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 7;</code>
+       */
+      public Builder setServiceConfig(
+          context.ContextOuterClass.ServiceConfig.Builder builderForValue) {
+        if (serviceConfigBuilder_ == null) {
+          serviceConfig_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceConfigBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 7;</code>
+       */
+      public Builder mergeServiceConfig(context.ContextOuterClass.ServiceConfig value) {
+        if (serviceConfigBuilder_ == null) {
+          if (serviceConfig_ != null) {
+            serviceConfig_ =
+              context.ContextOuterClass.ServiceConfig.newBuilder(serviceConfig_).mergeFrom(value).buildPartial();
+          } else {
+            serviceConfig_ = value;
+          }
+          onChanged();
+        } else {
+          serviceConfigBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 7;</code>
+       */
+      public Builder clearServiceConfig() {
+        if (serviceConfigBuilder_ == null) {
+          serviceConfig_ = null;
+          onChanged();
+        } else {
+          serviceConfig_ = null;
+          serviceConfigBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 7;</code>
+       */
+      public context.ContextOuterClass.ServiceConfig.Builder getServiceConfigBuilder() {
+        
+        onChanged();
+        return getServiceConfigFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 7;</code>
+       */
+      public context.ContextOuterClass.ServiceConfigOrBuilder getServiceConfigOrBuilder() {
+        if (serviceConfigBuilder_ != null) {
+          return serviceConfigBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceConfig_ == null ?
+              context.ContextOuterClass.ServiceConfig.getDefaultInstance() : serviceConfig_;
+        }
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 7;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceConfig, context.ContextOuterClass.ServiceConfig.Builder, context.ContextOuterClass.ServiceConfigOrBuilder> 
+          getServiceConfigFieldBuilder() {
+        if (serviceConfigBuilder_ == null) {
+          serviceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceConfig, context.ContextOuterClass.ServiceConfig.Builder, context.ContextOuterClass.ServiceConfigOrBuilder>(
+                  getServiceConfig(),
+                  getParentForChildren(),
+                  isClean());
+          serviceConfig_ = null;
+        }
+        return serviceConfigBuilder_;
+      }
+
+      private context.ContextOuterClass.Timestamp timestamp_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
+      /**
+       * <code>.context.Timestamp timestamp = 8;</code>
+       * @return Whether the timestamp field is set.
+       */
+      public boolean hasTimestamp() {
+        return timestampBuilder_ != null || timestamp_ != null;
+      }
+
+      private context.ContextOuterClass.Uuid serviceUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> serviceUuidBuilder_;
+      /**
+       * <code>.context.Timestamp timestamp = 8;</code>
+       * @return The timestamp.
+       */
+      public context.ContextOuterClass.Timestamp getTimestamp() {
+        if (timestampBuilder_ == null) {
+          return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+        } else {
+          return timestampBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 8;</code>
+       */
+      public Builder setTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (timestampBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          timestamp_ = value;
+          onChanged();
+        } else {
+          timestampBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 8;</code>
+       */
+      public Builder setTimestamp(
+          context.ContextOuterClass.Timestamp.Builder builderForValue) {
+        if (timestampBuilder_ == null) {
+          timestamp_ = builderForValue.build();
+          onChanged();
+        } else {
+          timestampBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 8;</code>
+       */
+      public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (timestampBuilder_ == null) {
+          if (timestamp_ != null) {
+            timestamp_ =
+              context.ContextOuterClass.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
+          } else {
+            timestamp_ = value;
+          }
+          onChanged();
+        } else {
+          timestampBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 8;</code>
+       */
+      public Builder clearTimestamp() {
+        if (timestampBuilder_ == null) {
+          timestamp_ = null;
+          onChanged();
+        } else {
+          timestamp_ = null;
+          timestampBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 8;</code>
+       */
+      public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
+        
+        onChanged();
+        return getTimestampFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 8;</code>
+       */
+      public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
+        if (timestampBuilder_ != null) {
+          return timestampBuilder_.getMessageOrBuilder();
+        } else {
+          return timestamp_ == null ?
+              context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+        }
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 8;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
+          getTimestampFieldBuilder() {
+        if (timestampBuilder_ == null) {
+          timestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
+                  getTimestamp(),
+                  getParentForChildren(),
+                  isClean());
+          timestamp_ = null;
+        }
+        return timestampBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.Service)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Service)
+    private static final context.ContextOuterClass.Service DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Service();
+    }
+
+    public static context.ContextOuterClass.Service getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Service>
+        PARSER = new com.google.protobuf.AbstractParser<Service>() {
+      @java.lang.Override
+      public Service parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Service(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Service> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Service> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Service getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ServiceStatusOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceStatus)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.ServiceStatusEnum service_status = 1;</code>
+     * @return The enum numeric value on the wire for serviceStatus.
+     */
+    int getServiceStatusValue();
+    /**
+     * <code>.context.ServiceStatusEnum service_status = 1;</code>
+     * @return The serviceStatus.
+     */
+    context.ContextOuterClass.ServiceStatusEnum getServiceStatus();
+  }
+  /**
+   * Protobuf type {@code context.ServiceStatus}
+   */
+  public static final class ServiceStatus extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ServiceStatus)
+      ServiceStatusOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ServiceStatus.newBuilder() to construct.
+    private ServiceStatus(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ServiceStatus() {
+      serviceStatus_ = 0;
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ServiceStatus();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ServiceStatus(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+              int rawValue = input.readEnum();
+
+              serviceStatus_ = rawValue;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ServiceStatus_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ServiceStatus_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ServiceStatus.class, context.ContextOuterClass.ServiceStatus.Builder.class);
+    }
+
+    public static final int SERVICE_STATUS_FIELD_NUMBER = 1;
+    private int serviceStatus_;
+    /**
+     * <code>.context.ServiceStatusEnum service_status = 1;</code>
+     * @return The enum numeric value on the wire for serviceStatus.
+     */
+    @java.lang.Override public int getServiceStatusValue() {
+      return serviceStatus_;
+    }
+    /**
+     * <code>.context.ServiceStatusEnum service_status = 1;</code>
+     * @return The serviceStatus.
+     */
+    @java.lang.Override public context.ContextOuterClass.ServiceStatusEnum getServiceStatus() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.ServiceStatusEnum result = context.ContextOuterClass.ServiceStatusEnum.valueOf(serviceStatus_);
+      return result == null ? context.ContextOuterClass.ServiceStatusEnum.UNRECOGNIZED : result;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (serviceStatus_ != context.ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED.getNumber()) {
+        output.writeEnum(1, serviceStatus_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (serviceStatus_ != context.ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(1, serviceStatus_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ServiceStatus)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ServiceStatus other = (context.ContextOuterClass.ServiceStatus) obj;
+
+      if (serviceStatus_ != other.serviceStatus_) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + SERVICE_STATUS_FIELD_NUMBER;
+      hash = (53 * hash) + serviceStatus_;
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceStatus parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceStatus parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceStatus parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceStatus parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ServiceStatus prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ServiceStatus}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ServiceStatus)
+        context.ContextOuterClass.ServiceStatusOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ServiceStatus_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ServiceStatus_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ServiceStatus.class, context.ContextOuterClass.ServiceStatus.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ServiceStatus.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        serviceStatus_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ServiceStatus_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceStatus getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceStatus.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceStatus build() {
+        context.ContextOuterClass.ServiceStatus result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceStatus buildPartial() {
+        context.ContextOuterClass.ServiceStatus result = new context.ContextOuterClass.ServiceStatus(this);
+        result.serviceStatus_ = serviceStatus_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ServiceStatus) {
+          return mergeFrom((context.ContextOuterClass.ServiceStatus)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ServiceStatus other) {
+        if (other == context.ContextOuterClass.ServiceStatus.getDefaultInstance()) return this;
+        if (other.serviceStatus_ != 0) {
+          setServiceStatusValue(other.getServiceStatusValue());
+        }
+        if (other.hasServiceStatus()) {
+          mergeServiceStatus(other.getServiceStatus());
+        }
+        if (other.hasServiceConfig()) {
+          mergeServiceConfig(other.getServiceConfig());
+        }
+        if (other.hasTimestamp()) {
+          mergeTimestamp(other.getTimestamp());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Service parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Service) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private context.ContextOuterClass.ServiceId serviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       * @return Whether the serviceId field is set.
+       */
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       * @return The serviceId.
+       */
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        } else {
+          return serviceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       */
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceId_ = value;
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       */
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       */
+      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (serviceId_ != null) {
+            serviceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+          } else {
+            serviceId_ = value;
+          }
+          onChanged();
+        } else {
+          serviceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       */
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+          onChanged();
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+        
+        onChanged();
+        return getServiceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getServiceId(),
+                  getParentForChildren(),
+                  isClean());
+          serviceId_ = null;
+        }
+        return serviceIdBuilder_;
+      }
+
+      private java.lang.Object name_ = "";
+      /**
+       * <code>string name = 2;</code>
+       * @return The name.
+       */
+      public java.lang.String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          name_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @return The bytes for name.
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @param value The name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @param value The bytes for name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        name_ = value;
+        onChanged();
+        return this;
+      }
+
+      private int serviceType_ = 0;
+      /**
+       * <code>.context.ServiceTypeEnum service_type = 3;</code>
+       * @return The enum numeric value on the wire for serviceType.
+       */
+      @java.lang.Override public int getServiceTypeValue() {
+        return serviceType_;
+      }
+      /**
+       * <code>.context.ServiceTypeEnum service_type = 3;</code>
+       * @param value The enum numeric value on the wire for serviceType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setServiceTypeValue(int value) {
+        
+        serviceType_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ServiceTypeEnum service_type = 3;</code>
+       * @return The serviceType.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceTypeEnum getServiceType() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.ServiceTypeEnum result = context.ContextOuterClass.ServiceTypeEnum.valueOf(serviceType_);
+        return result == null ? context.ContextOuterClass.ServiceTypeEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.context.ServiceTypeEnum service_type = 3;</code>
+       * @param value The serviceType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setServiceType(context.ContextOuterClass.ServiceTypeEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        serviceType_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ServiceStatus parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ServiceStatus) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private int serviceStatus_ = 0;
+      /**
+       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * @return The enum numeric value on the wire for serviceStatus.
+       */
+      @java.lang.Override public int getServiceStatusValue() {
+        return serviceStatus_;
+      }
+      /**
+       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * @param value The enum numeric value on the wire for serviceStatus to set.
+       * @return This builder for chaining.
+       */
+      public Builder setServiceStatusValue(int value) {
+        
+        serviceStatus_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * @return The serviceStatus.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceStatusEnum getServiceStatus() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.ServiceStatusEnum result = context.ContextOuterClass.ServiceStatusEnum.valueOf(serviceStatus_);
+        return result == null ? context.ContextOuterClass.ServiceStatusEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * @param value The serviceStatus to set.
+       * @return This builder for chaining.
+       */
+      public Builder setServiceStatus(context.ContextOuterClass.ServiceStatusEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        serviceStatus_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearServiceStatus() {
+        
+        serviceStatus_ = 0;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ServiceStatus)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ServiceStatus)
+    private static final context.ContextOuterClass.ServiceStatus DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceStatus();
+    }
+
+    public static context.ContextOuterClass.ServiceStatus getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ServiceStatus>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceStatus>() {
+      @java.lang.Override
+      public ServiceStatus parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ServiceStatus(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ServiceStatus> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ServiceStatus> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceStatus getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ServiceConfigOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceConfig)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.ConfigRule> 
+        getConfigRulesList();
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    context.ContextOuterClass.ConfigRule getConfigRules(int index);
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    int getConfigRulesCount();
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList();
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.ServiceConfig}
+   */
+  public static final class ServiceConfig extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ServiceConfig)
+      ServiceConfigOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ServiceConfig.newBuilder() to construct.
+    private ServiceConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ServiceConfig() {
+      configRules_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ServiceConfig();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ServiceConfig(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              configRules_.add(
+                  input.readMessage(context.ContextOuterClass.ConfigRule.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          configRules_ = java.util.Collections.unmodifiableList(configRules_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ServiceConfig_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ServiceConfig_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ServiceConfig.class, context.ContextOuterClass.ServiceConfig.Builder.class);
+    }
+
+    public static final int CONFIG_RULES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ConfigRule> configRules_;
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+      return configRules_;
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList() {
+      return configRules_;
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public int getConfigRulesCount() {
+      return configRules_.size();
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+      return configRules_.get(index);
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+        int index) {
+      return configRules_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < configRules_.size(); i++) {
+        output.writeMessage(1, configRules_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < configRules_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, configRules_.get(i));
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 4;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getServiceEndpointIdsBuilder(
+          int index) {
+        return getServiceEndpointIdsFieldBuilder().getBuilder(index);
+      }
+      if (!(obj instanceof context.ContextOuterClass.ServiceConfig)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ServiceConfig other = (context.ContextOuterClass.ServiceConfig) obj;
+
+      if (!getConfigRulesList()
+          .equals(other.getConfigRulesList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getConfigRulesCount() > 0) {
+        hash = (37 * hash) + CONFIG_RULES_FIELD_NUMBER;
+        hash = (53 * hash) + getConfigRulesList().hashCode();
+      }
+
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceConfig parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceConfig parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceConfig parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceConfig parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ServiceConfig prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ServiceConfig}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ServiceConfig)
+        context.ContextOuterClass.ServiceConfigOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ServiceConfig_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ServiceConfig_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ServiceConfig.class, context.ContextOuterClass.ServiceConfig.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ServiceConfig.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public Builder setServiceConstraints(
+          int index, context.ContextOuterClass.Constraint value) {
+        if (serviceConstraintsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.set(index, value);
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getConfigRulesFieldBuilder();
+        }
+        return this;
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          configRulesBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ServiceConfig_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceConfig getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceConfig.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceConfig build() {
+        context.ContextOuterClass.ServiceConfig result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public Builder clearServiceConstraints() {
+        if (serviceConstraintsBuilder_ == null) {
+          serviceConstraints_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public Builder removeServiceConstraints(int index) {
+        if (serviceConstraintsBuilder_ == null) {
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.remove(index);
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public context.ContextOuterClass.Constraint.Builder getServiceConstraintsBuilder(
+          int index) {
+        return getServiceConstraintsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public context.ContextOuterClass.ConstraintOrBuilder getServiceConstraintsOrBuilder(
+          int index) {
+        if (serviceConstraintsBuilder_ == null) {
+          return serviceConstraints_.get(index);  } else {
+          return serviceConstraintsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
+           getServiceConstraintsOrBuilderList() {
+        if (serviceConstraintsBuilder_ != null) {
+          return serviceConstraintsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(serviceConstraints_);
+        }
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public context.ContextOuterClass.Constraint.Builder addServiceConstraintsBuilder() {
+        return getServiceConstraintsFieldBuilder().addBuilder(
+            context.ContextOuterClass.Constraint.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public context.ContextOuterClass.Constraint.Builder addServiceConstraintsBuilder(
+          int index) {
+        return getServiceConstraintsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Constraint.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 5;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Constraint.Builder> 
+           getServiceConstraintsBuilderList() {
+        return getServiceConstraintsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> 
+          getServiceConstraintsFieldBuilder() {
+        if (serviceConstraintsBuilder_ == null) {
+          serviceConstraintsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder>(
+                  serviceConstraints_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          serviceConstraints_ = null;
+        }
+        return serviceConstraintsBuilder_;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceConfig buildPartial() {
+        context.ContextOuterClass.ServiceConfig result = new context.ContextOuterClass.ServiceConfig(this);
+        int from_bitField0_ = bitField0_;
+        if (configRulesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            configRules_ = java.util.Collections.unmodifiableList(configRules_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.configRules_ = configRules_;
+        } else {
+          result.configRules_ = configRulesBuilder_.build();
+        }
+
+        return this;
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ServiceConfig) {
+          return mergeFrom((context.ContextOuterClass.ServiceConfig)other);
+        } else {
+          serviceStatusBuilder_.mergeFrom(value);
+        }
+
+      public Builder mergeFrom(context.ContextOuterClass.ServiceConfig other) {
+        if (other == context.ContextOuterClass.ServiceConfig.getDefaultInstance()) return this;
+        if (configRulesBuilder_ == null) {
+          if (!other.configRules_.isEmpty()) {
+            if (configRules_.isEmpty()) {
+              configRules_ = other.configRules_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureConfigRulesIsMutable();
+              configRules_.addAll(other.configRules_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.configRules_.isEmpty()) {
+            if (configRulesBuilder_.isEmpty()) {
+              configRulesBuilder_.dispose();
+              configRulesBuilder_ = null;
+              configRules_ = other.configRules_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              configRulesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getConfigRulesFieldBuilder() : null;
+            } else {
+              configRulesBuilder_.addAllMessages(other.configRules_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ServiceStatus service_status = 6;</code>
+       */
+      public Builder clearServiceStatus() {
+        if (serviceStatusBuilder_ == null) {
+          serviceStatus_ = null;
+          onChanged();
+        } else {
+          serviceStatus_ = null;
+          serviceStatusBuilder_ = null;
+        }
+
+        return this;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ServiceConfig parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ServiceConfig) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+      }
+      /**
+       * <code>.context.ServiceStatus service_status = 6;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceStatus, context.ContextOuterClass.ServiceStatus.Builder, context.ContextOuterClass.ServiceStatusOrBuilder> 
+          getServiceStatusFieldBuilder() {
+        if (serviceStatusBuilder_ == null) {
+          serviceStatusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceStatus, context.ContextOuterClass.ServiceStatus.Builder, context.ContextOuterClass.ServiceStatusOrBuilder>(
+                  getServiceStatus(),
+                  getParentForChildren(),
+                  isClean());
+          serviceStatus_ = null;
+        }
+        return serviceStatusBuilder_;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.ConfigRule> configRules_ =
+        java.util.Collections.emptyList();
+      private void ensureConfigRulesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>(configRules_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> configRulesBuilder_;
+
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+        if (configRulesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(configRules_);
+        } else {
+          return configRulesBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public int getConfigRulesCount() {
+        if (configRulesBuilder_ == null) {
+          return configRules_.size();
+        } else {
+          return configRulesBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);
+        } else {
+          return configRulesBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, value);
+          onChanged();
+        } else {
+          configRulesBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          configRulesBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addConfigRules(context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConfigRulesIsMutable();
+          configRules_.add(value);
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, value);
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addConfigRules(
+          context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(builderForValue.build());
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addAllConfigRules(
+          java.lang.Iterable<? extends context.ContextOuterClass.ConfigRule> values) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, configRules_);
+          onChanged();
+        } else {
+          configRulesBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder clearConfigRules() {
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          configRulesBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder removeConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.remove(index);
+          onChanged();
+        } else {
+          configRulesBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRule.Builder getConfigRulesBuilder(
+          int index) {
+        return getConfigRulesFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+          int index) {
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);  } else {
+          return configRulesBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+           getConfigRulesOrBuilderList() {
+        if (configRulesBuilder_ != null) {
+          return configRulesBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(configRules_);
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder() {
+        return getConfigRulesFieldBuilder().addBuilder(
+            context.ContextOuterClass.ConfigRule.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder(
+          int index) {
+        return getConfigRulesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ConfigRule.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ConfigRule.Builder> 
+           getConfigRulesBuilderList() {
+        return getConfigRulesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> 
+          getConfigRulesFieldBuilder() {
+        if (configRulesBuilder_ == null) {
+          configRulesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder>(
+                  configRules_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          configRules_ = null;
+        }
+        return configRulesBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ServiceConfig)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ServiceConfig)
+    private static final context.ContextOuterClass.ServiceConfig DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceConfig();
+    }
+
+    public static context.ContextOuterClass.ServiceConfig getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ServiceConfig>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceConfig>() {
+      @java.lang.Override
+      public ServiceConfig parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ServiceConfig(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ServiceConfig> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ServiceConfig> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceConfig getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ServiceIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceIdList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.ServiceId> 
+        getServiceIdsList();
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    context.ContextOuterClass.ServiceId getServiceIds(int index);
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    int getServiceIdsCount();
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getServiceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.ServiceIdList}
+   */
+  public static final class ServiceIdList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ServiceIdList)
+      ServiceIdListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ServiceIdList.newBuilder() to construct.
+    private ServiceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ServiceIdList() {
+      serviceIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ServiceIdList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ServiceIdList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              serviceIds_.add(
+                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ServiceIdList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ServiceIdList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ServiceIdList.class, context.ContextOuterClass.ServiceIdList.Builder.class);
+    }
+
+    public static final int SERVICE_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_;
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
+      return serviceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getServiceIdsOrBuilderList() {
+      return serviceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    @java.lang.Override
+    public int getServiceIdsCount() {
+      return serviceIds_.size();
+    }
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getServiceIds(int index) {
+      return serviceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
+        int index) {
+      return serviceIds_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < serviceIds_.size(); i++) {
+        output.writeMessage(1, serviceIds_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < serviceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, serviceIds_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ServiceIdList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ServiceIdList other = (context.ContextOuterClass.ServiceIdList) obj;
+
+      if (!getServiceIdsList()
+          .equals(other.getServiceIdsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getServiceIdsCount() > 0) {
+        hash = (37 * hash) + SERVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceIdsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceIdList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceIdList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceIdList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceIdList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ServiceIdList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ServiceIdList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ServiceIdList)
+        context.ContextOuterClass.ServiceIdListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ServiceIdList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ServiceIdList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ServiceIdList.class, context.ContextOuterClass.ServiceIdList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ServiceIdList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getServiceIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (serviceIdsBuilder_ == null) {
+          serviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          serviceIdsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ServiceIdList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceIdList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceIdList build() {
+        context.ContextOuterClass.ServiceIdList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceIdList buildPartial() {
+        context.ContextOuterClass.ServiceIdList result = new context.ContextOuterClass.ServiceIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (serviceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.serviceIds_ = serviceIds_;
+        } else {
+          result.serviceIds_ = serviceIdsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ServiceIdList) {
+          return mergeFrom((context.ContextOuterClass.ServiceIdList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ServiceIdList other) {
+        if (other == context.ContextOuterClass.ServiceIdList.getDefaultInstance()) return this;
+        if (serviceIdsBuilder_ == null) {
+          if (!other.serviceIds_.isEmpty()) {
+            if (serviceIds_.isEmpty()) {
+              serviceIds_ = other.serviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureServiceIdsIsMutable();
+              serviceIds_.addAll(other.serviceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.serviceIds_.isEmpty()) {
+            if (serviceIdsBuilder_.isEmpty()) {
+              serviceIdsBuilder_.dispose();
+              serviceIdsBuilder_ = null;
+              serviceIds_ = other.serviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              serviceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getServiceIdsFieldBuilder() : null;
+            } else {
+              serviceIdsBuilder_.addAllMessages(other.serviceIds_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ServiceIdList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ServiceIdList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureServiceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(serviceIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdsBuilder_;
+
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
+        if (serviceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(serviceIds_);
+        } else {
+          return serviceIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public int getServiceIdsCount() {
+        if (serviceIdsBuilder_ == null) {
+          return serviceIds_.size();
+        } else {
+          return serviceIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceId getServiceIds(int index) {
+        if (serviceIdsBuilder_ == null) {
+          return serviceIds_.get(index);
+        } else {
+          return serviceIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public Builder setServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (serviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceIdsIsMutable();
+          serviceIds_.set(index, value);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public Builder setServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public Builder addServiceIds(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(value);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public Builder addServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (serviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(index, value);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public Builder addServiceIds(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public Builder addServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public Builder addAllServiceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, serviceIds_);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public Builder clearServiceIds() {
+        if (serviceIdsBuilder_ == null) {
+          serviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public Builder removeServiceIds(int index) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.remove(index);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdsBuilder(
+          int index) {
+        return getServiceIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
+          int index) {
+        if (serviceIdsBuilder_ == null) {
+          return serviceIds_.get(index);  } else {
+          return serviceIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+           getServiceIdsOrBuilderList() {
+        if (serviceIdsBuilder_ != null) {
+          return serviceIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(serviceIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder() {
+        return getServiceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder(
+          int index) {
+        return getServiceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
+           getServiceIdsBuilderList() {
+        return getServiceIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdsFieldBuilder() {
+        if (serviceIdsBuilder_ == null) {
+          serviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  serviceIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          serviceIds_ = null;
+        }
+        return serviceIdsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ServiceIdList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ServiceIdList)
+    private static final context.ContextOuterClass.ServiceIdList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceIdList();
+    }
+
+    public static context.ContextOuterClass.ServiceIdList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ServiceIdList>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceIdList>() {
+      @java.lang.Override
+      public ServiceIdList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ServiceIdList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ServiceIdList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ServiceIdList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ServiceListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.Service> 
+        getServicesList();
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    context.ContextOuterClass.Service getServices(int index);
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    int getServicesCount();
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ServiceOrBuilder> 
+        getServicesOrBuilderList();
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    context.ContextOuterClass.ServiceOrBuilder getServicesOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.ServiceList}
+   */
+  public static final class ServiceList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ServiceList)
+      ServiceListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ServiceList.newBuilder() to construct.
+    private ServiceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ServiceList() {
+      services_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ServiceList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ServiceList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                services_ = new java.util.ArrayList<context.ContextOuterClass.Service>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              services_.add(
+                  input.readMessage(context.ContextOuterClass.Service.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          services_ = java.util.Collections.unmodifiableList(services_);
         }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public context.ContextOuterClass.Constraint getServiceConstraints(int index) {
-        if (serviceConstraintsBuilder_ == null) {
-          return serviceConstraints_.get(index);
-        } else {
-          return serviceConstraintsBuilder_.getMessage(index);
-        }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ServiceList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ServiceList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ServiceList.class, context.ContextOuterClass.ServiceList.Builder.class);
+    }
+
+    public static final int SERVICES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Service> services_;
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.Service> getServicesList() {
+      return services_;
+    }
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ServiceOrBuilder> 
+        getServicesOrBuilderList() {
+      return services_;
+    }
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    @java.lang.Override
+    public int getServicesCount() {
+      return services_.size();
+    }
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Service getServices(int index) {
+      return services_.get(index);
+    }
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceOrBuilder getServicesOrBuilder(
+        int index) {
+      return services_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < services_.size(); i++) {
+        output.writeMessage(1, services_.get(i));
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public Builder setServiceConstraints(
-          int index, context.ContextOuterClass.Constraint value) {
-        if (serviceConstraintsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServiceConstraintsIsMutable();
-          serviceConstraints_.set(index, value);
-          onChanged();
-        } else {
-          serviceConstraintsBuilder_.setMessage(index, value);
-        }
-        return this;
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < services_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, services_.get(i));
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public Builder setServiceConstraints(
-          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
-        if (serviceConstraintsBuilder_ == null) {
-          ensureServiceConstraintsIsMutable();
-          serviceConstraints_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          serviceConstraintsBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public Builder addServiceConstraints(context.ContextOuterClass.Constraint value) {
-        if (serviceConstraintsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServiceConstraintsIsMutable();
-          serviceConstraints_.add(value);
-          onChanged();
-        } else {
-          serviceConstraintsBuilder_.addMessage(value);
-        }
-        return this;
+      if (!(obj instanceof context.ContextOuterClass.ServiceList)) {
+        return super.equals(obj);
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public Builder addServiceConstraints(
-          int index, context.ContextOuterClass.Constraint value) {
-        if (serviceConstraintsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServiceConstraintsIsMutable();
-          serviceConstraints_.add(index, value);
-          onChanged();
-        } else {
-          serviceConstraintsBuilder_.addMessage(index, value);
-        }
-        return this;
+      context.ContextOuterClass.ServiceList other = (context.ContextOuterClass.ServiceList) obj;
+
+      if (!getServicesList()
+          .equals(other.getServicesList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public Builder addServiceConstraints(
-          context.ContextOuterClass.Constraint.Builder builderForValue) {
-        if (serviceConstraintsBuilder_ == null) {
-          ensureServiceConstraintsIsMutable();
-          serviceConstraints_.add(builderForValue.build());
-          onChanged();
-        } else {
-          serviceConstraintsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getServicesCount() > 0) {
+        hash = (37 * hash) + SERVICES_FIELD_NUMBER;
+        hash = (53 * hash) + getServicesList().hashCode();
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public Builder addServiceConstraints(
-          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
-        if (serviceConstraintsBuilder_ == null) {
-          ensureServiceConstraintsIsMutable();
-          serviceConstraints_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          serviceConstraintsBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ServiceList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ServiceList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ServiceList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ServiceList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ServiceList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ServiceList)
+        context.ContextOuterClass.ServiceListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ServiceList_descriptor;
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public Builder addAllServiceConstraints(
-          java.lang.Iterable<? extends context.ContextOuterClass.Constraint> values) {
-        if (serviceConstraintsBuilder_ == null) {
-          ensureServiceConstraintsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, serviceConstraints_);
-          onChanged();
-        } else {
-          serviceConstraintsBuilder_.addAllMessages(values);
-        }
-        return this;
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ServiceList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ServiceList.class, context.ContextOuterClass.ServiceList.Builder.class);
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public Builder clearServiceConstraints() {
-        if (serviceConstraintsBuilder_ == null) {
-          serviceConstraints_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
-          onChanged();
-        } else {
-          serviceConstraintsBuilder_.clear();
+
+      // Construct using context.ContextOuterClass.ServiceList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getServicesFieldBuilder();
         }
-        return this;
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public Builder removeServiceConstraints(int index) {
-        if (serviceConstraintsBuilder_ == null) {
-          ensureServiceConstraintsIsMutable();
-          serviceConstraints_.remove(index);
-          onChanged();
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (servicesBuilder_ == null) {
+          services_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          serviceConstraintsBuilder_.remove(index);
+          servicesBuilder_.clear();
         }
         return this;
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public context.ContextOuterClass.Constraint.Builder getServiceConstraintsBuilder(
-          int index) {
-        return getServiceConstraintsFieldBuilder().getBuilder(index);
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ServiceList_descriptor;
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public context.ContextOuterClass.ConstraintOrBuilder getServiceConstraintsOrBuilder(
-          int index) {
-        if (serviceConstraintsBuilder_ == null) {
-          return serviceConstraints_.get(index);  } else {
-          return serviceConstraintsBuilder_.getMessageOrBuilder(index);
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceList build() {
+        context.ContextOuterClass.ServiceList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
+        return result;
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
-           getServiceConstraintsOrBuilderList() {
-        if (serviceConstraintsBuilder_ != null) {
-          return serviceConstraintsBuilder_.getMessageOrBuilderList();
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceList buildPartial() {
+        context.ContextOuterClass.ServiceList result = new context.ContextOuterClass.ServiceList(this);
+        int from_bitField0_ = bitField0_;
+        if (servicesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            services_ = java.util.Collections.unmodifiableList(services_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.services_ = services_;
         } else {
-          return java.util.Collections.unmodifiableList(serviceConstraints_);
+          result.services_ = servicesBuilder_.build();
         }
+        onBuilt();
+        return result;
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public context.ContextOuterClass.Constraint.Builder addServiceConstraintsBuilder() {
-        return getServiceConstraintsFieldBuilder().addBuilder(
-            context.ContextOuterClass.Constraint.getDefaultInstance());
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public context.ContextOuterClass.Constraint.Builder addServiceConstraintsBuilder(
-          int index) {
-        return getServiceConstraintsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Constraint.getDefaultInstance());
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public java.util.List<context.ContextOuterClass.Constraint.Builder> 
-           getServiceConstraintsBuilderList() {
-        return getServiceConstraintsFieldBuilder().getBuilderList();
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> 
-          getServiceConstraintsFieldBuilder() {
-        if (serviceConstraintsBuilder_ == null) {
-          serviceConstraintsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder>(
-                  serviceConstraints_,
-                  ((bitField0_ & 0x00000002) != 0),
-                  getParentForChildren(),
-                  isClean());
-          serviceConstraints_ = null;
-        }
-        return serviceConstraintsBuilder_;
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
       }
-
-      private context.ContextOuterClass.ServiceStatus serviceStatus_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceStatus, context.ContextOuterClass.ServiceStatus.Builder, context.ContextOuterClass.ServiceStatusOrBuilder> serviceStatusBuilder_;
-      /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
-       * @return Whether the serviceStatus field is set.
-       */
-      public boolean hasServiceStatus() {
-        return serviceStatusBuilder_ != null || serviceStatus_ != null;
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
       }
-      /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
-       * @return The serviceStatus.
-       */
-      public context.ContextOuterClass.ServiceStatus getServiceStatus() {
-        if (serviceStatusBuilder_ == null) {
-          return serviceStatus_ == null ? context.ContextOuterClass.ServiceStatus.getDefaultInstance() : serviceStatus_;
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ServiceList) {
+          return mergeFrom((context.ContextOuterClass.ServiceList)other);
         } else {
-          return serviceStatusBuilder_.getMessage();
+          super.mergeFrom(other);
+          return this;
         }
       }
-      /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
-       */
-      public Builder setServiceStatus(context.ContextOuterClass.ServiceStatus value) {
-        if (serviceStatusBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+
+      public Builder mergeFrom(context.ContextOuterClass.ServiceList other) {
+        if (other == context.ContextOuterClass.ServiceList.getDefaultInstance()) return this;
+        if (servicesBuilder_ == null) {
+          if (!other.services_.isEmpty()) {
+            if (services_.isEmpty()) {
+              services_ = other.services_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureServicesIsMutable();
+              services_.addAll(other.services_);
+            }
+            onChanged();
           }
-          serviceStatus_ = value;
-          onChanged();
         } else {
-          serviceStatusBuilder_.setMessage(value);
+          if (!other.services_.isEmpty()) {
+            if (servicesBuilder_.isEmpty()) {
+              servicesBuilder_.dispose();
+              servicesBuilder_ = null;
+              services_ = other.services_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              servicesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getServicesFieldBuilder() : null;
+            } else {
+              servicesBuilder_.addAllMessages(other.services_);
+            }
+          }
         }
-
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
         return this;
       }
-      /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
-       */
-      public Builder setServiceStatus(
-          context.ContextOuterClass.ServiceStatus.Builder builderForValue) {
-        if (serviceStatusBuilder_ == null) {
-          serviceStatus_ = builderForValue.build();
-          onChanged();
-        } else {
-          serviceStatusBuilder_.setMessage(builderForValue.build());
-        }
 
-        return this;
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
-       */
-      public Builder mergeServiceStatus(context.ContextOuterClass.ServiceStatus value) {
-        if (serviceStatusBuilder_ == null) {
-          if (serviceStatus_ != null) {
-            serviceStatus_ =
-              context.ContextOuterClass.ServiceStatus.newBuilder(serviceStatus_).mergeFrom(value).buildPartial();
-          } else {
-            serviceStatus_ = value;
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ServiceList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ServiceList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
-          onChanged();
-        } else {
-          serviceStatusBuilder_.mergeFrom(value);
         }
-
         return this;
       }
-      /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
-       */
-      public Builder clearServiceStatus() {
-        if (serviceStatusBuilder_ == null) {
-          serviceStatus_ = null;
-          onChanged();
-        } else {
-          serviceStatus_ = null;
-          serviceStatusBuilder_ = null;
-        }
+      private int bitField0_;
 
-        return this;
-      }
-      /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
-       */
-      public context.ContextOuterClass.ServiceStatus.Builder getServiceStatusBuilder() {
-        
-        onChanged();
-        return getServiceStatusFieldBuilder().getBuilder();
+      private java.util.List<context.ContextOuterClass.Service> services_ =
+        java.util.Collections.emptyList();
+      private void ensureServicesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          services_ = new java.util.ArrayList<context.ContextOuterClass.Service>(services_);
+          bitField0_ |= 0x00000001;
+         }
       }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Service, context.ContextOuterClass.Service.Builder, context.ContextOuterClass.ServiceOrBuilder> servicesBuilder_;
+
       /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public context.ContextOuterClass.ServiceStatusOrBuilder getServiceStatusOrBuilder() {
-        if (serviceStatusBuilder_ != null) {
-          return serviceStatusBuilder_.getMessageOrBuilder();
+      public java.util.List<context.ContextOuterClass.Service> getServicesList() {
+        if (servicesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(services_);
         } else {
-          return serviceStatus_ == null ?
-              context.ContextOuterClass.ServiceStatus.getDefaultInstance() : serviceStatus_;
+          return servicesBuilder_.getMessageList();
         }
       }
       /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceStatus, context.ContextOuterClass.ServiceStatus.Builder, context.ContextOuterClass.ServiceStatusOrBuilder> 
-          getServiceStatusFieldBuilder() {
-        if (serviceStatusBuilder_ == null) {
-          serviceStatusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ServiceStatus, context.ContextOuterClass.ServiceStatus.Builder, context.ContextOuterClass.ServiceStatusOrBuilder>(
-                  getServiceStatus(),
-                  getParentForChildren(),
-                  isClean());
-          serviceStatus_ = null;
+      public int getServicesCount() {
+        if (servicesBuilder_ == null) {
+          return services_.size();
+        } else {
+          return servicesBuilder_.getCount();
         }
-        return serviceStatusBuilder_;
-      }
-
-      private context.ContextOuterClass.ServiceConfig serviceConfig_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceConfig, context.ContextOuterClass.ServiceConfig.Builder, context.ContextOuterClass.ServiceConfigOrBuilder> serviceConfigBuilder_;
-      /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
-       * @return Whether the serviceConfig field is set.
-       */
-      public boolean hasServiceConfig() {
-        return serviceConfigBuilder_ != null || serviceConfig_ != null;
       }
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
-       * @return The serviceConfig.
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public context.ContextOuterClass.ServiceConfig getServiceConfig() {
-        if (serviceConfigBuilder_ == null) {
-          return serviceConfig_ == null ? context.ContextOuterClass.ServiceConfig.getDefaultInstance() : serviceConfig_;
+      public context.ContextOuterClass.Service getServices(int index) {
+        if (servicesBuilder_ == null) {
+          return services_.get(index);
         } else {
-          return serviceConfigBuilder_.getMessage();
+          return servicesBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public Builder setServiceConfig(context.ContextOuterClass.ServiceConfig value) {
-        if (serviceConfigBuilder_ == null) {
+      public Builder setServices(
+          int index, context.ContextOuterClass.Service value) {
+        if (servicesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          serviceConfig_ = value;
+          ensureServicesIsMutable();
+          services_.set(index, value);
           onChanged();
         } else {
-          serviceConfigBuilder_.setMessage(value);
+          servicesBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public Builder setServiceConfig(
-          context.ContextOuterClass.ServiceConfig.Builder builderForValue) {
-        if (serviceConfigBuilder_ == null) {
-          serviceConfig_ = builderForValue.build();
+      public Builder setServices(
+          int index, context.ContextOuterClass.Service.Builder builderForValue) {
+        if (servicesBuilder_ == null) {
+          ensureServicesIsMutable();
+          services_.set(index, builderForValue.build());
           onChanged();
         } else {
-          serviceConfigBuilder_.setMessage(builderForValue.build());
+          servicesBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public Builder mergeServiceConfig(context.ContextOuterClass.ServiceConfig value) {
-        if (serviceConfigBuilder_ == null) {
-          if (serviceConfig_ != null) {
-            serviceConfig_ =
-              context.ContextOuterClass.ServiceConfig.newBuilder(serviceConfig_).mergeFrom(value).buildPartial();
-          } else {
-            serviceConfig_ = value;
+      public Builder addServices(context.ContextOuterClass.Service value) {
+        if (servicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureServicesIsMutable();
+          services_.add(value);
           onChanged();
         } else {
-          serviceConfigBuilder_.mergeFrom(value);
+          servicesBuilder_.addMessage(value);
         }
-
         return this;
       }
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public Builder clearServiceConfig() {
-        if (serviceConfigBuilder_ == null) {
-          serviceConfig_ = null;
+      public Builder addServices(
+          int index, context.ContextOuterClass.Service value) {
+        if (servicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServicesIsMutable();
+          services_.add(index, value);
           onChanged();
         } else {
-          serviceConfig_ = null;
-          serviceConfigBuilder_ = null;
+          servicesBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
-       */
-      public context.ContextOuterClass.ServiceConfig.Builder getServiceConfigBuilder() {
-        
-        onChanged();
-        return getServiceConfigFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public context.ContextOuterClass.ServiceConfigOrBuilder getServiceConfigOrBuilder() {
-        if (serviceConfigBuilder_ != null) {
-          return serviceConfigBuilder_.getMessageOrBuilder();
+      public Builder addServices(
+          context.ContextOuterClass.Service.Builder builderForValue) {
+        if (servicesBuilder_ == null) {
+          ensureServicesIsMutable();
+          services_.add(builderForValue.build());
+          onChanged();
         } else {
-          return serviceConfig_ == null ?
-              context.ContextOuterClass.ServiceConfig.getDefaultInstance() : serviceConfig_;
+          servicesBuilder_.addMessage(builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceConfig, context.ContextOuterClass.ServiceConfig.Builder, context.ContextOuterClass.ServiceConfigOrBuilder> 
-          getServiceConfigFieldBuilder() {
-        if (serviceConfigBuilder_ == null) {
-          serviceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ServiceConfig, context.ContextOuterClass.ServiceConfig.Builder, context.ContextOuterClass.ServiceConfigOrBuilder>(
-                  getServiceConfig(),
-                  getParentForChildren(),
-                  isClean());
-          serviceConfig_ = null;
+      public Builder addServices(
+          int index, context.ContextOuterClass.Service.Builder builderForValue) {
+        if (servicesBuilder_ == null) {
+          ensureServicesIsMutable();
+          services_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          servicesBuilder_.addMessage(index, builderForValue.build());
         }
-        return serviceConfigBuilder_;
-      }
-
-      private context.ContextOuterClass.Timestamp timestamp_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
-      /**
-       * <code>.context.Timestamp timestamp = 7;</code>
-       * @return Whether the timestamp field is set.
-       */
-      public boolean hasTimestamp() {
-        return timestampBuilder_ != null || timestamp_ != null;
+        return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 7;</code>
-       * @return The timestamp.
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public context.ContextOuterClass.Timestamp getTimestamp() {
-        if (timestampBuilder_ == null) {
-          return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+      public Builder addAllServices(
+          java.lang.Iterable<? extends context.ContextOuterClass.Service> values) {
+        if (servicesBuilder_ == null) {
+          ensureServicesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, services_);
+          onChanged();
         } else {
-          return timestampBuilder_.getMessage();
+          servicesBuilder_.addAllMessages(values);
         }
+        return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 7;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public Builder setTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (timestampBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          timestamp_ = value;
+      public Builder clearServices() {
+        if (servicesBuilder_ == null) {
+          services_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          timestampBuilder_.setMessage(value);
+          servicesBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 7;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public Builder setTimestamp(
-          context.ContextOuterClass.Timestamp.Builder builderForValue) {
-        if (timestampBuilder_ == null) {
-          timestamp_ = builderForValue.build();
+      public Builder removeServices(int index) {
+        if (servicesBuilder_ == null) {
+          ensureServicesIsMutable();
+          services_.remove(index);
           onChanged();
         } else {
-          timestampBuilder_.setMessage(builderForValue.build());
+          servicesBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 7;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (timestampBuilder_ == null) {
-          if (timestamp_ != null) {
-            timestamp_ =
-              context.ContextOuterClass.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
-          } else {
-            timestamp_ = value;
-          }
-          onChanged();
-        } else {
-          timestampBuilder_.mergeFrom(value);
+      public context.ContextOuterClass.Service.Builder getServicesBuilder(
+          int index) {
+        return getServicesFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceOrBuilder getServicesOrBuilder(
+          int index) {
+        if (servicesBuilder_ == null) {
+          return services_.get(index);  } else {
+          return servicesBuilder_.getMessageOrBuilder(index);
         }
-
-        return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 7;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public Builder clearTimestamp() {
-        if (timestampBuilder_ == null) {
-          timestamp_ = null;
-          onChanged();
+      public java.util.List<? extends context.ContextOuterClass.ServiceOrBuilder> 
+           getServicesOrBuilderList() {
+        if (servicesBuilder_ != null) {
+          return servicesBuilder_.getMessageOrBuilderList();
         } else {
-          timestamp_ = null;
-          timestampBuilder_ = null;
+          return java.util.Collections.unmodifiableList(services_);
         }
-
-        return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 7;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
-        
-        onChanged();
-        return getTimestampFieldBuilder().getBuilder();
+      public context.ContextOuterClass.Service.Builder addServicesBuilder() {
+        return getServicesFieldBuilder().addBuilder(
+            context.ContextOuterClass.Service.getDefaultInstance());
       }
       /**
-       * <code>.context.Timestamp timestamp = 7;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
-        if (timestampBuilder_ != null) {
-          return timestampBuilder_.getMessageOrBuilder();
-        } else {
-          return timestamp_ == null ?
-              context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
-        }
+      public context.ContextOuterClass.Service.Builder addServicesBuilder(
+          int index) {
+        return getServicesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Service.getDefaultInstance());
       }
       /**
-       * <code>.context.Timestamp timestamp = 7;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
-          getTimestampFieldBuilder() {
-        if (timestampBuilder_ == null) {
-          timestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
-                  getTimestamp(),
+      public java.util.List<context.ContextOuterClass.Service.Builder> 
+           getServicesBuilderList() {
+        return getServicesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Service, context.ContextOuterClass.Service.Builder, context.ContextOuterClass.ServiceOrBuilder> 
+          getServicesFieldBuilder() {
+        if (servicesBuilder_ == null) {
+          servicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Service, context.ContextOuterClass.Service.Builder, context.ContextOuterClass.ServiceOrBuilder>(
+                  services_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          timestamp_ = null;
+          services_ = null;
         }
-        return timestampBuilder_;
+        return servicesBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -25254,82 +33351,103 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Service)
+      // @@protoc_insertion_point(builder_scope:context.ServiceList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Service)
-    private static final context.ContextOuterClass.Service DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ServiceList)
+    private static final context.ContextOuterClass.ServiceList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Service();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceList();
     }
 
-    public static context.ContextOuterClass.Service getDefaultInstance() {
+    public static context.ContextOuterClass.ServiceList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Service>
-        PARSER = new com.google.protobuf.AbstractParser<Service>() {
+    private static final com.google.protobuf.Parser<ServiceList>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceList>() {
       @java.lang.Override
-      public Service parsePartialFrom(
+      public ServiceList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Service(input, extensionRegistry);
+        return new ServiceList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Service> parser() {
+    public static com.google.protobuf.Parser<ServiceList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Service> getParserForType() {
+    public com.google.protobuf.Parser<ServiceList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Service getDefaultInstanceForType() {
+    public context.ContextOuterClass.ServiceList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ServiceStatusOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ServiceStatus)
+  public interface ServiceFilterOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceFilter)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ServiceStatusEnum service_status = 1;</code>
-     * @return The enum numeric value on the wire for serviceStatus.
+     * <code>.context.ServiceIdList service_ids = 1;</code>
+     * @return Whether the serviceIds field is set.
      */
-    int getServiceStatusValue();
+    boolean hasServiceIds();
     /**
-     * <code>.context.ServiceStatusEnum service_status = 1;</code>
-     * @return The serviceStatus.
+     * <code>.context.ServiceIdList service_ids = 1;</code>
+     * @return The serviceIds.
      */
-    context.ContextOuterClass.ServiceStatusEnum getServiceStatus();
+    context.ContextOuterClass.ServiceIdList getServiceIds();
+    /**
+     * <code>.context.ServiceIdList service_ids = 1;</code>
+     */
+    context.ContextOuterClass.ServiceIdListOrBuilder getServiceIdsOrBuilder();
+
+    /**
+     * <code>bool include_endpoint_ids = 2;</code>
+     * @return The includeEndpointIds.
+     */
+    boolean getIncludeEndpointIds();
+
+    /**
+     * <code>bool include_constraints = 3;</code>
+     * @return The includeConstraints.
+     */
+    boolean getIncludeConstraints();
+
+    /**
+     * <code>bool include_config_rules = 4;</code>
+     * @return The includeConfigRules.
+     */
+    boolean getIncludeConfigRules();
   }
   /**
-   * Protobuf type {@code context.ServiceStatus}
+   * Protobuf type {@code context.ServiceFilter}
    */
-  public static final class ServiceStatus extends
+  public static final class ServiceFilter extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ServiceStatus)
-      ServiceStatusOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ServiceFilter)
+      ServiceFilterOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ServiceStatus.newBuilder() to construct.
-    private ServiceStatus(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ServiceFilter.newBuilder() to construct.
+    private ServiceFilter(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ServiceStatus() {
-      serviceStatus_ = 0;
+    private ServiceFilter() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ServiceStatus();
+      return new ServiceFilter();
     }
 
     @java.lang.Override
@@ -25337,7 +33455,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ServiceStatus(
+    private ServiceFilter(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -25355,10 +33473,32 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 8: {
-              int rawValue = input.readEnum();
+            case 10: {
+              context.ContextOuterClass.ServiceIdList.Builder subBuilder = null;
+              if (serviceIds_ != null) {
+                subBuilder = serviceIds_.toBuilder();
+              }
+              serviceIds_ = input.readMessage(context.ContextOuterClass.ServiceIdList.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceIds_);
+                serviceIds_ = subBuilder.buildPartial();
+              }
 
-              serviceStatus_ = rawValue;
+              break;
+            }
+            case 16: {
+
+              includeEndpointIds_ = input.readBool();
+              break;
+            }
+            case 24: {
+
+              includeConstraints_ = input.readBool();
+              break;
+            }
+            case 32: {
+
+              includeConfigRules_ = input.readBool();
               break;
             }
             default: {
@@ -25382,34 +33522,74 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ServiceStatus_descriptor;
+      return context.ContextOuterClass.internal_static_context_ServiceFilter_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ServiceStatus_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ServiceFilter_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ServiceStatus.class, context.ContextOuterClass.ServiceStatus.Builder.class);
+              context.ContextOuterClass.ServiceFilter.class, context.ContextOuterClass.ServiceFilter.Builder.class);
     }
 
-    public static final int SERVICE_STATUS_FIELD_NUMBER = 1;
-    private int serviceStatus_;
+    public static final int SERVICE_IDS_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ServiceIdList serviceIds_;
     /**
-     * <code>.context.ServiceStatusEnum service_status = 1;</code>
-     * @return The enum numeric value on the wire for serviceStatus.
+     * <code>.context.ServiceIdList service_ids = 1;</code>
+     * @return Whether the serviceIds field is set.
      */
-    @java.lang.Override public int getServiceStatusValue() {
-      return serviceStatus_;
+    @java.lang.Override
+    public boolean hasServiceIds() {
+      return serviceIds_ != null;
     }
     /**
-     * <code>.context.ServiceStatusEnum service_status = 1;</code>
-     * @return The serviceStatus.
+     * <code>.context.ServiceIdList service_ids = 1;</code>
+     * @return The serviceIds.
      */
-    @java.lang.Override public context.ContextOuterClass.ServiceStatusEnum getServiceStatus() {
-      @SuppressWarnings("deprecation")
-      context.ContextOuterClass.ServiceStatusEnum result = context.ContextOuterClass.ServiceStatusEnum.valueOf(serviceStatus_);
-      return result == null ? context.ContextOuterClass.ServiceStatusEnum.UNRECOGNIZED : result;
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdList getServiceIds() {
+      return serviceIds_ == null ? context.ContextOuterClass.ServiceIdList.getDefaultInstance() : serviceIds_;
+    }
+    /**
+     * <code>.context.ServiceIdList service_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdListOrBuilder getServiceIdsOrBuilder() {
+      return getServiceIds();
+    }
+
+    public static final int INCLUDE_ENDPOINT_IDS_FIELD_NUMBER = 2;
+    private boolean includeEndpointIds_;
+    /**
+     * <code>bool include_endpoint_ids = 2;</code>
+     * @return The includeEndpointIds.
+     */
+    @java.lang.Override
+    public boolean getIncludeEndpointIds() {
+      return includeEndpointIds_;
+    }
+
+    public static final int INCLUDE_CONSTRAINTS_FIELD_NUMBER = 3;
+    private boolean includeConstraints_;
+    /**
+     * <code>bool include_constraints = 3;</code>
+     * @return The includeConstraints.
+     */
+    @java.lang.Override
+    public boolean getIncludeConstraints() {
+      return includeConstraints_;
+    }
+
+    public static final int INCLUDE_CONFIG_RULES_FIELD_NUMBER = 4;
+    private boolean includeConfigRules_;
+    /**
+     * <code>bool include_config_rules = 4;</code>
+     * @return The includeConfigRules.
+     */
+    @java.lang.Override
+    public boolean getIncludeConfigRules() {
+      return includeConfigRules_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -25426,8 +33606,17 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (serviceStatus_ != context.ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED.getNumber()) {
-        output.writeEnum(1, serviceStatus_);
+      if (serviceIds_ != null) {
+        output.writeMessage(1, getServiceIds());
+      }
+      if (includeEndpointIds_ != false) {
+        output.writeBool(2, includeEndpointIds_);
+      }
+      if (includeConstraints_ != false) {
+        output.writeBool(3, includeConstraints_);
+      }
+      if (includeConfigRules_ != false) {
+        output.writeBool(4, includeConfigRules_);
       }
       unknownFields.writeTo(output);
     }
@@ -25438,9 +33627,21 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (serviceStatus_ != context.ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED.getNumber()) {
+      if (serviceIds_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(1, serviceStatus_);
+          .computeMessageSize(1, getServiceIds());
+      }
+      if (includeEndpointIds_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(2, includeEndpointIds_);
+      }
+      if (includeConstraints_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(3, includeConstraints_);
+      }
+      if (includeConfigRules_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(4, includeConfigRules_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -25452,12 +33653,22 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ServiceStatus)) {
+      if (!(obj instanceof context.ContextOuterClass.ServiceFilter)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ServiceStatus other = (context.ContextOuterClass.ServiceStatus) obj;
+      context.ContextOuterClass.ServiceFilter other = (context.ContextOuterClass.ServiceFilter) obj;
 
-      if (serviceStatus_ != other.serviceStatus_) return false;
+      if (hasServiceIds() != other.hasServiceIds()) return false;
+      if (hasServiceIds()) {
+        if (!getServiceIds()
+            .equals(other.getServiceIds())) return false;
+      }
+      if (getIncludeEndpointIds()
+          != other.getIncludeEndpointIds()) return false;
+      if (getIncludeConstraints()
+          != other.getIncludeConstraints()) return false;
+      if (getIncludeConfigRules()
+          != other.getIncludeConfigRules()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -25469,76 +33680,87 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + SERVICE_STATUS_FIELD_NUMBER;
-      hash = (53 * hash) + serviceStatus_;
+      if (hasServiceIds()) {
+        hash = (37 * hash) + SERVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceIds().hashCode();
+      }
+      hash = (37 * hash) + INCLUDE_ENDPOINT_IDS_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getIncludeEndpointIds());
+      hash = (37 * hash) + INCLUDE_CONSTRAINTS_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getIncludeConstraints());
+      hash = (37 * hash) + INCLUDE_CONFIG_RULES_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getIncludeConfigRules());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ServiceStatus parseFrom(
+    public static context.ContextOuterClass.ServiceFilter parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceStatus parseFrom(
+    public static context.ContextOuterClass.ServiceFilter parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceStatus parseFrom(
+    public static context.ContextOuterClass.ServiceFilter parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceStatus parseFrom(
+    public static context.ContextOuterClass.ServiceFilter parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceStatus parseFrom(byte[] data)
+    public static context.ContextOuterClass.ServiceFilter parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceStatus parseFrom(
+    public static context.ContextOuterClass.ServiceFilter parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceStatus parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceFilter parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceStatus parseFrom(
+    public static context.ContextOuterClass.ServiceFilter parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceStatus parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceFilter parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceStatus parseDelimitedFrom(
+    public static context.ContextOuterClass.ServiceFilter parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceStatus parseFrom(
+    public static context.ContextOuterClass.ServiceFilter parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceStatus parseFrom(
+    public static context.ContextOuterClass.ServiceFilter parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -25551,7 +33773,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ServiceStatus prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ServiceFilter prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -25567,26 +33789,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ServiceStatus}
+     * Protobuf type {@code context.ServiceFilter}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ServiceStatus)
-        context.ContextOuterClass.ServiceStatusOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ServiceFilter)
+        context.ContextOuterClass.ServiceFilterOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ServiceStatus_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceFilter_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ServiceStatus_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ServiceFilter_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ServiceStatus.class, context.ContextOuterClass.ServiceStatus.Builder.class);
+                context.ContextOuterClass.ServiceFilter.class, context.ContextOuterClass.ServiceFilter.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ServiceStatus.newBuilder()
+      // Construct using context.ContextOuterClass.ServiceFilter.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -25604,7 +33826,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        serviceStatus_ = 0;
+        if (serviceIdsBuilder_ == null) {
+          serviceIds_ = null;
+        } else {
+          serviceIds_ = null;
+          serviceIdsBuilder_ = null;
+        }
+        includeEndpointIds_ = false;
+
+        includeConstraints_ = false;
+
+        includeConfigRules_ = false;
 
         return this;
       }
@@ -25612,17 +33844,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ServiceStatus_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceFilter_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceStatus getDefaultInstanceForType() {
-        return context.ContextOuterClass.ServiceStatus.getDefaultInstance();
+      public context.ContextOuterClass.ServiceFilter getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceFilter.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceStatus build() {
-        context.ContextOuterClass.ServiceStatus result = buildPartial();
+      public context.ContextOuterClass.ServiceFilter build() {
+        context.ContextOuterClass.ServiceFilter result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -25630,9 +33862,16 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceStatus buildPartial() {
-        context.ContextOuterClass.ServiceStatus result = new context.ContextOuterClass.ServiceStatus(this);
-        result.serviceStatus_ = serviceStatus_;
+      public context.ContextOuterClass.ServiceFilter buildPartial() {
+        context.ContextOuterClass.ServiceFilter result = new context.ContextOuterClass.ServiceFilter(this);
+        if (serviceIdsBuilder_ == null) {
+          result.serviceIds_ = serviceIds_;
+        } else {
+          result.serviceIds_ = serviceIdsBuilder_.build();
+        }
+        result.includeEndpointIds_ = includeEndpointIds_;
+        result.includeConstraints_ = includeConstraints_;
+        result.includeConfigRules_ = includeConfigRules_;
         onBuilt();
         return result;
       }
@@ -25671,18 +33910,28 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ServiceStatus) {
-          return mergeFrom((context.ContextOuterClass.ServiceStatus)other);
+        if (other instanceof context.ContextOuterClass.ServiceFilter) {
+          return mergeFrom((context.ContextOuterClass.ServiceFilter)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
+        return this;
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ServiceStatus other) {
-        if (other == context.ContextOuterClass.ServiceStatus.getDefaultInstance()) return this;
-        if (other.serviceStatus_ != 0) {
-          setServiceStatusValue(other.getServiceStatusValue());
+      public Builder mergeFrom(context.ContextOuterClass.ServiceFilter other) {
+        if (other == context.ContextOuterClass.ServiceFilter.getDefaultInstance()) return this;
+        if (other.hasServiceIds()) {
+          mergeServiceIds(other.getServiceIds());
+        }
+        if (other.getIncludeEndpointIds() != false) {
+          setIncludeEndpointIds(other.getIncludeEndpointIds());
+        }
+        if (other.getIncludeConstraints() != false) {
+          setIncludeConstraints(other.getIncludeConstraints());
+        }
+        if (other.getIncludeConfigRules() != false) {
+          setIncludeConfigRules(other.getIncludeConfigRules());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -25699,11 +33948,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ServiceStatus parsedMessage = null;
+        context.ContextOuterClass.ServiceFilter parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ServiceStatus) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ServiceFilter) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -25713,56 +33962,209 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private int serviceStatus_ = 0;
+      private context.ContextOuterClass.ServiceIdList serviceIds_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceIdList, context.ContextOuterClass.ServiceIdList.Builder, context.ContextOuterClass.ServiceIdListOrBuilder> serviceIdsBuilder_;
       /**
-       * <code>.context.ServiceStatusEnum service_status = 1;</code>
-       * @return The enum numeric value on the wire for serviceStatus.
+       * <code>.context.ServiceIdList service_ids = 1;</code>
+       * @return Whether the serviceIds field is set.
        */
-      @java.lang.Override public int getServiceStatusValue() {
-        return serviceStatus_;
+      public boolean hasServiceIds() {
+        return serviceIdsBuilder_ != null || serviceIds_ != null;
       }
       /**
-       * <code>.context.ServiceStatusEnum service_status = 1;</code>
-       * @param value The enum numeric value on the wire for serviceStatus to set.
+       * <code>.context.ServiceIdList service_ids = 1;</code>
+       * @return The serviceIds.
+       */
+      public context.ContextOuterClass.ServiceIdList getServiceIds() {
+        if (serviceIdsBuilder_ == null) {
+          return serviceIds_ == null ? context.ContextOuterClass.ServiceIdList.getDefaultInstance() : serviceIds_;
+        } else {
+          return serviceIdsBuilder_.getMessage();
+        }
+        return this;
+      }
+      /**
+       * <code>.context.ServiceIdList service_ids = 1;</code>
+       */
+      public Builder setServiceIds(context.ContextOuterClass.ServiceIdList value) {
+        if (serviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceIds_ = value;
+          onChanged();
+        } else {
+          serviceIdsBuilder_.setMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>.context.ServiceIdList service_ids = 1;</code>
+       */
+      public Builder setServiceIds(
+          context.ContextOuterClass.ServiceIdList.Builder builderForValue) {
+        if (serviceIdsBuilder_ == null) {
+          serviceIds_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceIdsBuilder_.setMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>.context.ServiceIdList service_ids = 1;</code>
+       */
+      public Builder mergeServiceIds(context.ContextOuterClass.ServiceIdList value) {
+        if (serviceIdsBuilder_ == null) {
+          if (serviceIds_ != null) {
+            serviceIds_ =
+              context.ContextOuterClass.ServiceIdList.newBuilder(serviceIds_).mergeFrom(value).buildPartial();
+          } else {
+            serviceIds_ = value;
+          }
+          onChanged();
+        } else {
+          serviceIdsBuilder_.mergeFrom(value);
+        }
+      }
+      /**
+       * <code>.context.ServiceIdList service_ids = 1;</code>
+       */
+      public Builder clearServiceIds() {
+        if (serviceIdsBuilder_ == null) {
+          serviceIds_ = null;
+          onChanged();
+        } else {
+          serviceIds_ = null;
+          serviceIdsBuilder_ = null;
+        }
+      }
+      /**
+       * <code>.context.ServiceIdList service_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceIdList.Builder getServiceIdsBuilder() {
+        
+        onChanged();
+        return getServiceIdsFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceIdList service_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceIdListOrBuilder getServiceIdsOrBuilder() {
+        if (serviceIdsBuilder_ != null) {
+          return serviceIdsBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceIds_ == null ?
+              context.ContextOuterClass.ServiceIdList.getDefaultInstance() : serviceIds_;
+        }
+      }
+      /**
+       * <code>.context.ServiceIdList service_ids = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceIdList, context.ContextOuterClass.ServiceIdList.Builder, context.ContextOuterClass.ServiceIdListOrBuilder> 
+          getServiceIdsFieldBuilder() {
+        if (serviceIdsBuilder_ == null) {
+          serviceIdsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceIdList, context.ContextOuterClass.ServiceIdList.Builder, context.ContextOuterClass.ServiceIdListOrBuilder>(
+                  getServiceIds(),
+                  getParentForChildren(),
+                  isClean());
+          serviceIds_ = null;
+        }
+        return serviceIdsBuilder_;
+      }
+
+      private boolean includeEndpointIds_ ;
+      /**
+       * <code>bool include_endpoint_ids = 2;</code>
+       * @return The includeEndpointIds.
+       */
+      @java.lang.Override
+      public boolean getIncludeEndpointIds() {
+        return includeEndpointIds_;
+      }
+      /**
+       * <code>bool include_endpoint_ids = 2;</code>
+       * @param value The includeEndpointIds to set.
        * @return This builder for chaining.
        */
-      public Builder setServiceStatusValue(int value) {
+      public Builder setIncludeEndpointIds(boolean value) {
         
-        serviceStatus_ = value;
+        includeEndpointIds_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>.context.ServiceStatusEnum service_status = 1;</code>
-       * @return The serviceStatus.
+       * <code>bool include_endpoint_ids = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIncludeEndpointIds() {
+        
+        includeEndpointIds_ = false;
+        onChanged();
+        return this;
+      }
+
+      private boolean includeConstraints_ ;
+      /**
+       * <code>bool include_constraints = 3;</code>
+       * @return The includeConstraints.
        */
       @java.lang.Override
-      public context.ContextOuterClass.ServiceStatusEnum getServiceStatus() {
-        @SuppressWarnings("deprecation")
-        context.ContextOuterClass.ServiceStatusEnum result = context.ContextOuterClass.ServiceStatusEnum.valueOf(serviceStatus_);
-        return result == null ? context.ContextOuterClass.ServiceStatusEnum.UNRECOGNIZED : result;
+      public boolean getIncludeConstraints() {
+        return includeConstraints_;
       }
       /**
-       * <code>.context.ServiceStatusEnum service_status = 1;</code>
-       * @param value The serviceStatus to set.
+       * <code>bool include_constraints = 3;</code>
+       * @param value The includeConstraints to set.
        * @return This builder for chaining.
        */
-      public Builder setServiceStatus(context.ContextOuterClass.ServiceStatusEnum value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
+      public Builder setIncludeConstraints(boolean value) {
         
-        serviceStatus_ = value.getNumber();
+        includeConstraints_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * <code>bool include_constraints = 3;</code>
        * @return This builder for chaining.
        */
-      public Builder clearServiceStatus() {
+      public Builder clearIncludeConstraints() {
         
-        serviceStatus_ = 0;
+        includeConstraints_ = false;
+        onChanged();
+        return this;
+      }
+
+      private boolean includeConfigRules_ ;
+      /**
+       * <code>bool include_config_rules = 4;</code>
+       * @return The includeConfigRules.
+       */
+      @java.lang.Override
+      public boolean getIncludeConfigRules() {
+        return includeConfigRules_;
+      }
+      /**
+       * <code>bool include_config_rules = 4;</code>
+       * @param value The includeConfigRules to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIncludeConfigRules(boolean value) {
+        
+        includeConfigRules_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>bool include_config_rules = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIncludeConfigRules() {
+        
+        includeConfigRules_ = false;
         onChanged();
         return this;
       }
@@ -25779,95 +34181,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ServiceStatus)
+      // @@protoc_insertion_point(builder_scope:context.ServiceFilter)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ServiceStatus)
-    private static final context.ContextOuterClass.ServiceStatus DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ServiceFilter)
+    private static final context.ContextOuterClass.ServiceFilter DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceStatus();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceFilter();
     }
 
-    public static context.ContextOuterClass.ServiceStatus getDefaultInstance() {
+    public static context.ContextOuterClass.ServiceFilter getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ServiceStatus>
-        PARSER = new com.google.protobuf.AbstractParser<ServiceStatus>() {
+    private static final com.google.protobuf.Parser<ServiceFilter>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceFilter>() {
       @java.lang.Override
-      public ServiceStatus parsePartialFrom(
+      public ServiceFilter parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ServiceStatus(input, extensionRegistry);
+        return new ServiceFilter(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ServiceStatus> parser() {
+    public static com.google.protobuf.Parser<ServiceFilter> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ServiceStatus> getParserForType() {
+    public com.google.protobuf.Parser<ServiceFilter> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ServiceStatus getDefaultInstanceForType() {
+    public context.ContextOuterClass.ServiceFilter getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ServiceConfigOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ServiceConfig)
+  public interface ServiceEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceEvent)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
-    java.util.List<context.ContextOuterClass.ConfigRule> 
-        getConfigRulesList();
+    boolean hasEvent();
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
-    context.ContextOuterClass.ConfigRule getConfigRules(int index);
+    context.ContextOuterClass.Event getEvent();
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.Event event = 1;</code>
      */
-    int getConfigRulesCount();
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return Whether the serviceId field is set.
      */
-    java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
-        getConfigRulesOrBuilderList();
+    boolean hasServiceId();
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return The serviceId.
      */
-    context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
-        int index);
+    context.ContextOuterClass.ServiceId getServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
   }
   /**
-   * Protobuf type {@code context.ServiceConfig}
+   * Protobuf type {@code context.ServiceEvent}
    */
-  public static final class ServiceConfig extends
+  public static final class ServiceEvent extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ServiceConfig)
-      ServiceConfigOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ServiceEvent)
+      ServiceEventOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ServiceConfig.newBuilder() to construct.
-    private ServiceConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ServiceEvent.newBuilder() to construct.
+    private ServiceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ServiceConfig() {
-      configRules_ = java.util.Collections.emptyList();
+    private ServiceEvent() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ServiceConfig();
+      return new ServiceEvent();
     }
 
     @java.lang.Override
@@ -25875,7 +34282,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ServiceConfig(
+    private ServiceEvent(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -25895,12 +34302,29 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>();
-                mutable_bitField0_ |= 0x00000001;
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
               }
-              configRules_.add(
-                  input.readMessage(context.ContextOuterClass.ConfigRule.parser(), extensionRegistry));
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
+              if (serviceId_ != null) {
+                subBuilder = serviceId_.toBuilder();
+              }
+              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceId_);
+                serviceId_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -25919,7 +34343,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          configRules_ = java.util.Collections.unmodifiableList(configRules_);
+          services_ = java.util.Collections.unmodifiableList(services_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -25927,55 +34351,67 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ServiceConfig_descriptor;
+      return context.ContextOuterClass.internal_static_context_ServiceEvent_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ServiceConfig_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ServiceEvent_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ServiceConfig.class, context.ContextOuterClass.ServiceConfig.Builder.class);
+              context.ContextOuterClass.ServiceEvent.class, context.ContextOuterClass.ServiceEvent.Builder.class);
     }
 
-    public static final int CONFIG_RULES_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.ConfigRule> configRules_;
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
-      return configRules_;
+    public boolean hasEvent() {
+      return event_ != null;
     }
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
-        getConfigRulesOrBuilderList() {
-      return configRules_;
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
     }
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.Event event = 1;</code>
      */
     @java.lang.Override
-    public int getConfigRulesCount() {
-      return configRules_.size();
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
     }
+
+    public static final int SERVICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ServiceId serviceId_;
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return Whether the serviceId field is set.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
-      return configRules_.get(index);
+    public boolean hasServiceId() {
+      return serviceId_ != null;
     }
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return The serviceId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
-        int index) {
-      return configRules_.get(index);
+    public context.ContextOuterClass.ServiceId getServiceId() {
+      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+      return getServiceId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -25992,8 +34428,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < configRules_.size(); i++) {
-        output.writeMessage(1, configRules_.get(i));
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (serviceId_ != null) {
+        output.writeMessage(2, getServiceId());
       }
       unknownFields.writeTo(output);
     }
@@ -26004,9 +34443,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < configRules_.size(); i++) {
+      if (event_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, configRules_.get(i));
+          .computeMessageSize(1, getEvent());
+      }
+      if (serviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getServiceId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -26018,13 +34461,21 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ServiceConfig)) {
+      if (!(obj instanceof context.ContextOuterClass.ServiceEvent)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ServiceConfig other = (context.ContextOuterClass.ServiceConfig) obj;
+      context.ContextOuterClass.ServiceEvent other = (context.ContextOuterClass.ServiceEvent) obj;
 
-      if (!getConfigRulesList()
-          .equals(other.getConfigRulesList())) return false;
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasServiceId() != other.hasServiceId()) return false;
+      if (hasServiceId()) {
+        if (!getServiceId()
+            .equals(other.getServiceId())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -26036,78 +34487,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getConfigRulesCount() > 0) {
-        hash = (37 * hash) + CONFIG_RULES_FIELD_NUMBER;
-        hash = (53 * hash) + getConfigRulesList().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (hasServiceId()) {
+        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceId().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ServiceConfig parseFrom(
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceConfig parseFrom(
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceConfig parseFrom(
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceConfig parseFrom(
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceConfig parseFrom(byte[] data)
+    public static context.ContextOuterClass.ServiceEvent parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceConfig parseFrom(
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceConfig parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceEvent parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceConfig parseFrom(
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceConfig parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceEvent parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceConfig parseDelimitedFrom(
+    public static context.ContextOuterClass.ServiceEvent parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceConfig parseFrom(
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceConfig parseFrom(
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -26120,7 +34575,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ServiceConfig prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ServiceEvent prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -26136,26 +34591,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ServiceConfig}
+     * Protobuf type {@code context.ServiceEvent}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ServiceConfig)
-        context.ContextOuterClass.ServiceConfigOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ServiceEvent)
+        context.ContextOuterClass.ServiceEventOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ServiceConfig_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceEvent_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ServiceConfig_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ServiceEvent_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ServiceConfig.class, context.ContextOuterClass.ServiceConfig.Builder.class);
+                context.ContextOuterClass.ServiceEvent.class, context.ContextOuterClass.ServiceEvent.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ServiceConfig.newBuilder()
+      // Construct using context.ContextOuterClass.ServiceEvent.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -26168,17 +34623,23 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getConfigRulesFieldBuilder();
+          getServicesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (configRulesBuilder_ == null) {
-          configRules_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (eventBuilder_ == null) {
+          event_ = null;
         } else {
-          configRulesBuilder_.clear();
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
         }
         return this;
       }
@@ -26186,17 +34647,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ServiceConfig_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceEvent_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceConfig getDefaultInstanceForType() {
-        return context.ContextOuterClass.ServiceConfig.getDefaultInstance();
+      public context.ContextOuterClass.ServiceEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceEvent.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceConfig build() {
-        context.ContextOuterClass.ServiceConfig result = buildPartial();
+      public context.ContextOuterClass.ServiceEvent build() {
+        context.ContextOuterClass.ServiceEvent result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -26204,17 +34665,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceConfig buildPartial() {
-        context.ContextOuterClass.ServiceConfig result = new context.ContextOuterClass.ServiceConfig(this);
-        int from_bitField0_ = bitField0_;
-        if (configRulesBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            configRules_ = java.util.Collections.unmodifiableList(configRules_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.configRules_ = configRules_;
+      public context.ContextOuterClass.ServiceEvent buildPartial() {
+        context.ContextOuterClass.ServiceEvent result = new context.ContextOuterClass.ServiceEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
         } else {
-          result.configRules_ = configRulesBuilder_.build();
+          result.event_ = eventBuilder_.build();
+        }
+        if (serviceIdBuilder_ == null) {
+          result.serviceId_ = serviceId_;
+        } else {
+          result.serviceId_ = serviceIdBuilder_.build();
         }
         onBuilt();
         return result;
@@ -26254,41 +34715,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ServiceConfig) {
-          return mergeFrom((context.ContextOuterClass.ServiceConfig)other);
+        if (other instanceof context.ContextOuterClass.ServiceEvent) {
+          return mergeFrom((context.ContextOuterClass.ServiceEvent)other);
         } else {
           super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(context.ContextOuterClass.ServiceConfig other) {
-        if (other == context.ContextOuterClass.ServiceConfig.getDefaultInstance()) return this;
-        if (configRulesBuilder_ == null) {
-          if (!other.configRules_.isEmpty()) {
-            if (configRules_.isEmpty()) {
-              configRules_ = other.configRules_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureConfigRulesIsMutable();
-              configRules_.addAll(other.configRules_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.configRules_.isEmpty()) {
-            if (configRulesBuilder_.isEmpty()) {
-              configRulesBuilder_.dispose();
-              configRulesBuilder_ = null;
-              configRules_ = other.configRules_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              configRulesBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getConfigRulesFieldBuilder() : null;
-            } else {
-              configRulesBuilder_.addAllMessages(other.configRules_);
-            }
-          }
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ServiceEvent other) {
+        if (other == context.ContextOuterClass.ServiceEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (other.hasServiceId()) {
+          mergeServiceId(other.getServiceId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -26305,11 +34746,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ServiceConfig parsedMessage = null;
+        context.ContextOuterClass.ServiceEvent parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ServiceConfig) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ServiceEvent) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -26318,246 +34759,243 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.ConfigRule> configRules_ =
-        java.util.Collections.emptyList();
-      private void ensureConfigRulesIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>(configRules_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> configRulesBuilder_;
 
+      private context.ContextOuterClass.Event event_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
-        if (configRulesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(configRules_);
-        } else {
-          return configRulesBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
        */
-      public int getConfigRulesCount() {
-        if (configRulesBuilder_ == null) {
-          return configRules_.size();
-        } else {
-          return configRulesBuilder_.getCount();
-        }
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
        */
-      public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
-        if (configRulesBuilder_ == null) {
-          return configRules_.get(index);
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         } else {
-          return configRulesBuilder_.getMessage(index);
+          return eventBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setConfigRules(
-          int index, context.ContextOuterClass.ConfigRule value) {
-        if (configRulesBuilder_ == null) {
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureConfigRulesIsMutable();
-          configRules_.set(index, value);
+          event_ = value;
           onChanged();
         } else {
-          configRulesBuilder_.setMessage(index, value);
+          eventBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setConfigRules(
-          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.set(index, builderForValue.build());
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
           onChanged();
         } else {
-          configRulesBuilder_.setMessage(index, builderForValue.build());
+          eventBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addConfigRules(context.ContextOuterClass.ConfigRule value) {
-        if (configRulesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+          } else {
+            event_ = value;
           }
-          ensureConfigRulesIsMutable();
-          configRules_.add(value);
           onChanged();
         } else {
-          configRulesBuilder_.addMessage(value);
+          eventBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addConfigRules(
-          int index, context.ContextOuterClass.ConfigRule value) {
-        if (configRulesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConfigRulesIsMutable();
-          configRules_.add(index, value);
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
           onChanged();
         } else {
-          configRulesBuilder_.addMessage(index, value);
+          event_ = null;
+          eventBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addConfigRules(
-          context.ContextOuterClass.ConfigRule.Builder builderForValue) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.add(builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+        
+        onChanged();
+        return getEventFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
         } else {
-          configRulesBuilder_.addMessage(builderForValue.build());
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addConfigRules(
-          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          configRulesBuilder_.addMessage(index, builderForValue.build());
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
+          getEventFieldBuilder() {
+        if (eventBuilder_ == null) {
+          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
+                  getEvent(),
+                  getParentForChildren(),
+                  isClean());
+          event_ = null;
         }
-        return this;
+        return eventBuilder_;
       }
+
+      private context.ContextOuterClass.ServiceId serviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.ServiceId service_id = 2;</code>
+       * @return Whether the serviceId field is set.
        */
-      public Builder addAllConfigRules(
-          java.lang.Iterable<? extends context.ContextOuterClass.ConfigRule> values) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, configRules_);
-          onChanged();
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       * @return The serviceId.
+       */
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
         } else {
-          configRulesBuilder_.addAllMessages(values);
+          return serviceIdBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.ServiceId service_id = 2;</code>
        */
-      public Builder clearConfigRules() {
-        if (configRulesBuilder_ == null) {
-          configRules_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceId_ = value;
           onChanged();
         } else {
-          configRulesBuilder_.clear();
+          serviceIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.ServiceId service_id = 2;</code>
        */
-      public Builder removeConfigRules(int index) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.remove(index);
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
           onChanged();
         } else {
-          configRulesBuilder_.remove(index);
+          serviceIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
-       */
-      public context.ContextOuterClass.ConfigRule.Builder getConfigRulesBuilder(
-          int index) {
-        return getConfigRulesFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.ServiceId service_id = 2;</code>
        */
-      public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
-          int index) {
-        if (configRulesBuilder_ == null) {
-          return configRules_.get(index);  } else {
-          return configRulesBuilder_.getMessageOrBuilder(index);
+      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (serviceId_ != null) {
+            serviceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+          } else {
+            serviceId_ = value;
+          }
+          onChanged();
+        } else {
+          serviceIdBuilder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.ServiceId service_id = 2;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
-           getConfigRulesOrBuilderList() {
-        if (configRulesBuilder_ != null) {
-          return configRulesBuilder_.getMessageOrBuilderList();
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(configRules_);
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.ServiceId service_id = 2;</code>
        */
-      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder() {
-        return getConfigRulesFieldBuilder().addBuilder(
-            context.ContextOuterClass.ConfigRule.getDefaultInstance());
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+        
+        onChanged();
+        return getServiceIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.ServiceId service_id = 2;</code>
        */
-      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder(
-          int index) {
-        return getConfigRulesFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ConfigRule.getDefaultInstance());
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        }
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.ServiceId service_id = 2;</code>
        */
-      public java.util.List<context.ContextOuterClass.ConfigRule.Builder> 
-           getConfigRulesBuilderList() {
-        return getConfigRulesFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> 
-          getConfigRulesFieldBuilder() {
-        if (configRulesBuilder_ == null) {
-          configRulesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder>(
-                  configRules_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getServiceId(),
                   getParentForChildren(),
                   isClean());
-          configRules_ = null;
+          serviceId_ = null;
         }
-        return configRulesBuilder_;
+        return serviceIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -26572,95 +35010,104 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ServiceConfig)
+      // @@protoc_insertion_point(builder_scope:context.ServiceEvent)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ServiceConfig)
-    private static final context.ContextOuterClass.ServiceConfig DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ServiceEvent)
+    private static final context.ContextOuterClass.ServiceEvent DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceConfig();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceEvent();
     }
 
-    public static context.ContextOuterClass.ServiceConfig getDefaultInstance() {
+    public static context.ContextOuterClass.ServiceEvent getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ServiceConfig>
-        PARSER = new com.google.protobuf.AbstractParser<ServiceConfig>() {
+    private static final com.google.protobuf.Parser<ServiceEvent>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceEvent>() {
       @java.lang.Override
-      public ServiceConfig parsePartialFrom(
+      public ServiceEvent parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ServiceConfig(input, extensionRegistry);
+        return new ServiceEvent(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ServiceConfig> parser() {
+    public static com.google.protobuf.Parser<ServiceEvent> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ServiceConfig> getParserForType() {
+    public com.google.protobuf.Parser<ServiceEvent> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ServiceConfig getDefaultInstanceForType() {
+    public context.ContextOuterClass.ServiceEvent getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ServiceIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ServiceIdList)
+  public interface SliceIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceId)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
      */
-    java.util.List<context.ContextOuterClass.ServiceId> 
-        getServiceIdsList();
+    boolean hasContextId();
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
      */
-    context.ContextOuterClass.ServiceId getServiceIds(int index);
+    context.ContextOuterClass.ContextId getContextId();
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>.context.ContextId context_id = 1;</code>
      */
-    int getServiceIdsCount();
+    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
+
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>.context.Uuid slice_uuid = 2;</code>
+     * @return Whether the sliceUuid field is set.
      */
-    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getServiceIdsOrBuilderList();
+    boolean hasSliceUuid();
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>.context.Uuid slice_uuid = 2;</code>
+     * @return The sliceUuid.
      */
-    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
-        int index);
+    context.ContextOuterClass.Uuid getSliceUuid();
+    /**
+     * <code>.context.Uuid slice_uuid = 2;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getSliceUuidOrBuilder();
   }
   /**
-   * Protobuf type {@code context.ServiceIdList}
+   * <pre>
+   * ----- Slice ---------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.SliceId}
    */
-  public static final class ServiceIdList extends
+  public static final class SliceId extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ServiceIdList)
-      ServiceIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceId)
+      SliceIdOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ServiceIdList.newBuilder() to construct.
-    private ServiceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceId.newBuilder() to construct.
+    private SliceId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ServiceIdList() {
-      serviceIds_ = java.util.Collections.emptyList();
+    private SliceId() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ServiceIdList();
+      return new SliceId();
     }
 
     @java.lang.Override
@@ -26668,7 +35115,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ServiceIdList(
+    private SliceId(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -26676,7 +35123,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -26688,12 +35134,29 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
-                mutable_bitField0_ |= 0x00000001;
+              context.ContextOuterClass.ContextId.Builder subBuilder = null;
+              if (contextId_ != null) {
+                subBuilder = contextId_.toBuilder();
               }
-              serviceIds_.add(
-                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
+              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(contextId_);
+                contextId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (sliceUuid_ != null) {
+                subBuilder = sliceUuid_.toBuilder();
+              }
+              sliceUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceUuid_);
+                sliceUuid_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -26711,64 +35174,73 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ServiceIdList_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceId_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ServiceIdList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceId_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ServiceIdList.class, context.ContextOuterClass.ServiceIdList.Builder.class);
+              context.ContextOuterClass.SliceId.class, context.ContextOuterClass.SliceId.Builder.class);
     }
 
-    public static final int SERVICE_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_;
+    public static final int CONTEXT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ContextId contextId_;
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
-      return serviceIds_;
+    public boolean hasContextId() {
+      return contextId_ != null;
     }
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getServiceIdsOrBuilderList() {
-      return serviceIds_;
+    public context.ContextOuterClass.ContextId getContextId() {
+      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
     }
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>.context.ContextId context_id = 1;</code>
      */
     @java.lang.Override
-    public int getServiceIdsCount() {
-      return serviceIds_.size();
+    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+      return getContextId();
     }
+
+    public static final int SLICE_UUID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.Uuid sliceUuid_;
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>.context.Uuid slice_uuid = 2;</code>
+     * @return Whether the sliceUuid field is set.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceId getServiceIds(int index) {
-      return serviceIds_.get(index);
+    public boolean hasSliceUuid() {
+      return sliceUuid_ != null;
     }
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>.context.Uuid slice_uuid = 2;</code>
+     * @return The sliceUuid.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
-        int index) {
-      return serviceIds_.get(index);
+    public context.ContextOuterClass.Uuid getSliceUuid() {
+      return sliceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : sliceUuid_;
+    }
+    /**
+     * <code>.context.Uuid slice_uuid = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getSliceUuidOrBuilder() {
+      return getSliceUuid();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -26785,8 +35257,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < serviceIds_.size(); i++) {
-        output.writeMessage(1, serviceIds_.get(i));
+      if (contextId_ != null) {
+        output.writeMessage(1, getContextId());
+      }
+      if (sliceUuid_ != null) {
+        output.writeMessage(2, getSliceUuid());
       }
       unknownFields.writeTo(output);
     }
@@ -26797,9 +35272,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < serviceIds_.size(); i++) {
+      if (contextId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, serviceIds_.get(i));
+          .computeMessageSize(1, getContextId());
+      }
+      if (sliceUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getSliceUuid());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -26811,13 +35290,21 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ServiceIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceId)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ServiceIdList other = (context.ContextOuterClass.ServiceIdList) obj;
+      context.ContextOuterClass.SliceId other = (context.ContextOuterClass.SliceId) obj;
 
-      if (!getServiceIdsList()
-          .equals(other.getServiceIdsList())) return false;
+      if (hasContextId() != other.hasContextId()) return false;
+      if (hasContextId()) {
+        if (!getContextId()
+            .equals(other.getContextId())) return false;
+      }
+      if (hasSliceUuid() != other.hasSliceUuid()) return false;
+      if (hasSliceUuid()) {
+        if (!getSliceUuid()
+            .equals(other.getSliceUuid())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -26829,78 +35316,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getServiceIdsCount() > 0) {
-        hash = (37 * hash) + SERVICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceIdsList().hashCode();
+      if (hasContextId()) {
+        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getContextId().hashCode();
+      }
+      if (hasSliceUuid()) {
+        hash = (37 * hash) + SLICE_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceUuid().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ServiceIdList parseFrom(
+    public static context.ContextOuterClass.SliceId parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceIdList parseFrom(
+    public static context.ContextOuterClass.SliceId parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceIdList parseFrom(
+    public static context.ContextOuterClass.SliceId parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceIdList parseFrom(
+    public static context.ContextOuterClass.SliceId parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceIdList parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceId parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceIdList parseFrom(
+    public static context.ContextOuterClass.SliceId parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceIdList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceId parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceIdList parseFrom(
+    public static context.ContextOuterClass.SliceId parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceIdList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceId parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceIdList parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceId parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceIdList parseFrom(
+    public static context.ContextOuterClass.SliceId parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceIdList parseFrom(
+    public static context.ContextOuterClass.SliceId parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -26913,7 +35404,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ServiceIdList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceId prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -26929,26 +35420,30 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ServiceIdList}
+     * <pre>
+     * ----- Slice ---------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.SliceId}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ServiceIdList)
-        context.ContextOuterClass.ServiceIdListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceId)
+        context.ContextOuterClass.SliceIdOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ServiceIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceId_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ServiceIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceId_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ServiceIdList.class, context.ContextOuterClass.ServiceIdList.Builder.class);
+                context.ContextOuterClass.SliceId.class, context.ContextOuterClass.SliceId.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ServiceIdList.newBuilder()
+      // Construct using context.ContextOuterClass.SliceId.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -26961,17 +35456,22 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getServiceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (serviceIdsBuilder_ == null) {
-          serviceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
         } else {
-          serviceIdsBuilder_.clear();
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+        if (sliceUuidBuilder_ == null) {
+          sliceUuid_ = null;
+        } else {
+          sliceUuid_ = null;
+          sliceUuidBuilder_ = null;
         }
         return this;
       }
@@ -26979,17 +35479,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ServiceIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceId_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.ServiceIdList.getDefaultInstance();
+      public context.ContextOuterClass.SliceId getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceId.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceIdList build() {
-        context.ContextOuterClass.ServiceIdList result = buildPartial();
+      public context.ContextOuterClass.SliceId build() {
+        context.ContextOuterClass.SliceId result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -26997,17 +35497,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceIdList buildPartial() {
-        context.ContextOuterClass.ServiceIdList result = new context.ContextOuterClass.ServiceIdList(this);
-        int from_bitField0_ = bitField0_;
-        if (serviceIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.serviceIds_ = serviceIds_;
+      public context.ContextOuterClass.SliceId buildPartial() {
+        context.ContextOuterClass.SliceId result = new context.ContextOuterClass.SliceId(this);
+        if (contextIdBuilder_ == null) {
+          result.contextId_ = contextId_;
         } else {
-          result.serviceIds_ = serviceIdsBuilder_.build();
+          result.contextId_ = contextIdBuilder_.build();
+        }
+        if (sliceUuidBuilder_ == null) {
+          result.sliceUuid_ = sliceUuid_;
+        } else {
+          result.sliceUuid_ = sliceUuidBuilder_.build();
         }
         onBuilt();
         return result;
@@ -27047,41 +35547,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ServiceIdList) {
-          return mergeFrom((context.ContextOuterClass.ServiceIdList)other);
+        if (other instanceof context.ContextOuterClass.SliceId) {
+          return mergeFrom((context.ContextOuterClass.SliceId)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ServiceIdList other) {
-        if (other == context.ContextOuterClass.ServiceIdList.getDefaultInstance()) return this;
-        if (serviceIdsBuilder_ == null) {
-          if (!other.serviceIds_.isEmpty()) {
-            if (serviceIds_.isEmpty()) {
-              serviceIds_ = other.serviceIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureServiceIdsIsMutable();
-              serviceIds_.addAll(other.serviceIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.serviceIds_.isEmpty()) {
-            if (serviceIdsBuilder_.isEmpty()) {
-              serviceIdsBuilder_.dispose();
-              serviceIdsBuilder_ = null;
-              serviceIds_ = other.serviceIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              serviceIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getServiceIdsFieldBuilder() : null;
-            } else {
-              serviceIdsBuilder_.addAllMessages(other.serviceIds_);
-            }
-          }
+      public Builder mergeFrom(context.ContextOuterClass.SliceId other) {
+        if (other == context.ContextOuterClass.SliceId.getDefaultInstance()) return this;
+        if (other.hasContextId()) {
+          mergeContextId(other.getContextId());
+        }
+        if (other.hasSliceUuid()) {
+          mergeSliceUuid(other.getSliceUuid());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -27098,11 +35578,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ServiceIdList parsedMessage = null;
+        context.ContextOuterClass.SliceId parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ServiceIdList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceId) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -27111,246 +35591,247 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_ =
-        java.util.Collections.emptyList();
-      private void ensureServiceIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(serviceIds_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdsBuilder_;
 
+      private context.ContextOuterClass.ContextId contextId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
-        if (serviceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(serviceIds_);
-        } else {
-          return serviceIdsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return Whether the contextId field is set.
        */
-      public int getServiceIdsCount() {
-        if (serviceIdsBuilder_ == null) {
-          return serviceIds_.size();
-        } else {
-          return serviceIdsBuilder_.getCount();
-        }
+      public boolean hasContextId() {
+        return contextIdBuilder_ != null || contextId_ != null;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return The contextId.
        */
-      public context.ContextOuterClass.ServiceId getServiceIds(int index) {
-        if (serviceIdsBuilder_ == null) {
-          return serviceIds_.get(index);
+      public context.ContextOuterClass.ContextId getContextId() {
+        if (contextIdBuilder_ == null) {
+          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
         } else {
-          return serviceIdsBuilder_.getMessage(index);
+          return contextIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ContextId context_id = 1;</code>
        */
-      public Builder setServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (serviceIdsBuilder_ == null) {
+      public Builder setContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureServiceIdsIsMutable();
-          serviceIds_.set(index, value);
+          contextId_ = value;
           onChanged();
         } else {
-          serviceIdsBuilder_.setMessage(index, value);
+          contextIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ContextId context_id = 1;</code>
        */
-      public Builder setServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
-          serviceIds_.set(index, builderForValue.build());
+      public Builder setContextId(
+          context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdBuilder_ == null) {
+          contextId_ = builderForValue.build();
           onChanged();
         } else {
-          serviceIdsBuilder_.setMessage(index, builderForValue.build());
+          contextIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ContextId context_id = 1;</code>
        */
-      public Builder addServiceIds(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (contextId_ != null) {
+            contextId_ =
+              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+          } else {
+            contextId_ = value;
           }
-          ensureServiceIdsIsMutable();
-          serviceIds_.add(value);
           onChanged();
         } else {
-          serviceIdsBuilder_.addMessage(value);
+          contextIdBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ContextId context_id = 1;</code>
        */
-      public Builder addServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (serviceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServiceIdsIsMutable();
-          serviceIds_.add(index, value);
+      public Builder clearContextId() {
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
           onChanged();
         } else {
-          serviceIdsBuilder_.addMessage(index, value);
+          contextId_ = null;
+          contextIdBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ContextId context_id = 1;</code>
        */
-      public Builder addServiceIds(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
-          serviceIds_.add(builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+        
+        onChanged();
+        return getContextIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+        if (contextIdBuilder_ != null) {
+          return contextIdBuilder_.getMessageOrBuilder();
         } else {
-          serviceIdsBuilder_.addMessage(builderForValue.build());
+          return contextId_ == null ?
+              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ContextId context_id = 1;</code>
        */
-      public Builder addServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
-          serviceIds_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          serviceIdsBuilder_.addMessage(index, builderForValue.build());
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
+          getContextIdFieldBuilder() {
+        if (contextIdBuilder_ == null) {
+          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
+                  getContextId(),
+                  getParentForChildren(),
+                  isClean());
+          contextId_ = null;
         }
-        return this;
+        return contextIdBuilder_;
       }
+
+      private context.ContextOuterClass.Uuid sliceUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> sliceUuidBuilder_;
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.Uuid slice_uuid = 2;</code>
+       * @return Whether the sliceUuid field is set.
        */
-      public Builder addAllServiceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, serviceIds_);
-          onChanged();
+      public boolean hasSliceUuid() {
+        return sliceUuidBuilder_ != null || sliceUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid slice_uuid = 2;</code>
+       * @return The sliceUuid.
+       */
+      public context.ContextOuterClass.Uuid getSliceUuid() {
+        if (sliceUuidBuilder_ == null) {
+          return sliceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : sliceUuid_;
         } else {
-          serviceIdsBuilder_.addAllMessages(values);
+          return sliceUuidBuilder_.getMessage();
         }
-        return this;
       }
+
+      private context.ContextOuterClass.ServiceId serviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.Uuid slice_uuid = 2;</code>
        */
-      public Builder clearServiceIds() {
-        if (serviceIdsBuilder_ == null) {
-          serviceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder setSliceUuid(context.ContextOuterClass.Uuid value) {
+        if (sliceUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sliceUuid_ = value;
           onChanged();
         } else {
-          serviceIdsBuilder_.clear();
+          sliceUuidBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.Uuid slice_uuid = 2;</code>
        */
-      public Builder removeServiceIds(int index) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
-          serviceIds_.remove(index);
+      public Builder setSliceUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (sliceUuidBuilder_ == null) {
+          sliceUuid_ = builderForValue.build();
           onChanged();
         } else {
-          serviceIdsBuilder_.remove(index);
+          sliceUuidBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder getServiceIdsBuilder(
-          int index) {
-        return getServiceIdsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.Uuid slice_uuid = 2;</code>
        */
-      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
-          int index) {
-        if (serviceIdsBuilder_ == null) {
-          return serviceIds_.get(index);  } else {
-          return serviceIdsBuilder_.getMessageOrBuilder(index);
+      public Builder mergeSliceUuid(context.ContextOuterClass.Uuid value) {
+        if (sliceUuidBuilder_ == null) {
+          if (sliceUuid_ != null) {
+            sliceUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(sliceUuid_).mergeFrom(value).buildPartial();
+          } else {
+            sliceUuid_ = value;
+          }
+          onChanged();
+        } else {
+          sliceUuidBuilder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.Uuid slice_uuid = 2;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-           getServiceIdsOrBuilderList() {
-        if (serviceIdsBuilder_ != null) {
-          return serviceIdsBuilder_.getMessageOrBuilderList();
+      public Builder clearSliceUuid() {
+        if (sliceUuidBuilder_ == null) {
+          sliceUuid_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(serviceIds_);
+          sliceUuid_ = null;
+          sliceUuidBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.Uuid slice_uuid = 2;</code>
        */
-      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder() {
-        return getServiceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.ServiceId.getDefaultInstance());
+      public context.ContextOuterClass.Uuid.Builder getSliceUuidBuilder() {
+        
+        onChanged();
+        return getSliceUuidFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.Uuid slice_uuid = 2;</code>
        */
-      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder(
-          int index) {
-        return getServiceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
+      public context.ContextOuterClass.UuidOrBuilder getSliceUuidOrBuilder() {
+        if (sliceUuidBuilder_ != null) {
+          return sliceUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return sliceUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : sliceUuid_;
+        }
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.Uuid slice_uuid = 2;</code>
        */
-      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
-           getServiceIdsBuilderList() {
-        return getServiceIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getServiceIdsFieldBuilder() {
-        if (serviceIdsBuilder_ == null) {
-          serviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  serviceIds_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getSliceUuidFieldBuilder() {
+        if (sliceUuidBuilder_ == null) {
+          sliceUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getSliceUuid(),
                   getParentForChildren(),
                   isClean());
-          serviceIds_ = null;
+          sliceUuid_ = null;
         }
-        return serviceIdsBuilder_;
+        return sliceUuidBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -27365,95 +35846,258 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ServiceIdList)
+      // @@protoc_insertion_point(builder_scope:context.SliceId)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ServiceIdList)
-    private static final context.ContextOuterClass.ServiceIdList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceId)
+    private static final context.ContextOuterClass.SliceId DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceIdList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceId();
     }
 
-    public static context.ContextOuterClass.ServiceIdList getDefaultInstance() {
+    public static context.ContextOuterClass.SliceId getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ServiceIdList>
-        PARSER = new com.google.protobuf.AbstractParser<ServiceIdList>() {
+    private static final com.google.protobuf.Parser<SliceId>
+        PARSER = new com.google.protobuf.AbstractParser<SliceId>() {
       @java.lang.Override
-      public ServiceIdList parsePartialFrom(
+      public SliceId parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ServiceIdList(input, extensionRegistry);
+        return new SliceId(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ServiceIdList> parser() {
-      return PARSER;
-    }
+    public static com.google.protobuf.Parser<SliceId> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<SliceId> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.SliceId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface SliceOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Slice)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.SliceId slice_id = 1;</code>
+     * @return Whether the sliceId field is set.
+     */
+    boolean hasSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 1;</code>
+     * @return The sliceId.
+     */
+    context.ContextOuterClass.SliceId getSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 1;</code>
+     */
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
+
+    /**
+     * <code>string name = 2;</code>
+     * @return The name.
+     */
+    java.lang.String getName();
+    /**
+     * <code>string name = 2;</code>
+     * @return The bytes for name.
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
+     */
+    java.util.List<context.ContextOuterClass.EndPointId> 
+        getSliceEndpointIdsList();
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
+     */
+    context.ContextOuterClass.EndPointId getSliceEndpointIds(int index);
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
+     */
+    int getSliceEndpointIdsCount();
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getSliceEndpointIdsOrBuilderList();
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getSliceEndpointIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 4;</code>
+     */
+    java.util.List<context.ContextOuterClass.Constraint> 
+        getSliceConstraintsList();
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 4;</code>
+     */
+    context.ContextOuterClass.Constraint getSliceConstraints(int index);
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 4;</code>
+     */
+    int getSliceConstraintsCount();
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 4;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
+        getSliceConstraintsOrBuilderList();
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 4;</code>
+     */
+    context.ContextOuterClass.ConstraintOrBuilder getSliceConstraintsOrBuilder(
+        int index);
 
-    @java.lang.Override
-    public com.google.protobuf.Parser<ServiceIdList> getParserForType() {
-      return PARSER;
-    }
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
+     */
+    java.util.List<context.ContextOuterClass.ServiceId> 
+        getSliceServiceIdsList();
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
+     */
+    context.ContextOuterClass.ServiceId getSliceServiceIds(int index);
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
+     */
+    int getSliceServiceIdsCount();
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getSliceServiceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getSliceServiceIdsOrBuilder(
+        int index);
 
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceIdList getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
+     */
+    java.util.List<context.ContextOuterClass.SliceId> 
+        getSliceSubsliceIdsList();
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
+     */
+    context.ContextOuterClass.SliceId getSliceSubsliceIds(int index);
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
+     */
+    int getSliceSubsliceIdsCount();
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+        getSliceSubsliceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
+     */
+    context.ContextOuterClass.SliceIdOrBuilder getSliceSubsliceIdsOrBuilder(
+        int index);
 
-  }
+    /**
+     * <code>.context.SliceStatus slice_status = 7;</code>
+     * @return Whether the sliceStatus field is set.
+     */
+    boolean hasSliceStatus();
+    /**
+     * <code>.context.SliceStatus slice_status = 7;</code>
+     * @return The sliceStatus.
+     */
+    context.ContextOuterClass.SliceStatus getSliceStatus();
+    /**
+     * <code>.context.SliceStatus slice_status = 7;</code>
+     */
+    context.ContextOuterClass.SliceStatusOrBuilder getSliceStatusOrBuilder();
 
-  public interface ServiceListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ServiceList)
-      com.google.protobuf.MessageOrBuilder {
+    /**
+     * <code>.context.SliceConfig slice_config = 8;</code>
+     * @return Whether the sliceConfig field is set.
+     */
+    boolean hasSliceConfig();
+    /**
+     * <code>.context.SliceConfig slice_config = 8;</code>
+     * @return The sliceConfig.
+     */
+    context.ContextOuterClass.SliceConfig getSliceConfig();
+    /**
+     * <code>.context.SliceConfig slice_config = 8;</code>
+     */
+    context.ContextOuterClass.SliceConfigOrBuilder getSliceConfigOrBuilder();
 
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>.context.SliceOwner slice_owner = 9;</code>
+     * @return Whether the sliceOwner field is set.
      */
-    java.util.List<context.ContextOuterClass.Service> 
-        getServicesList();
+    boolean hasSliceOwner();
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>.context.SliceOwner slice_owner = 9;</code>
+     * @return The sliceOwner.
      */
-    context.ContextOuterClass.Service getServices(int index);
+    context.ContextOuterClass.SliceOwner getSliceOwner();
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>.context.SliceOwner slice_owner = 9;</code>
      */
-    int getServicesCount();
+    context.ContextOuterClass.SliceOwnerOrBuilder getSliceOwnerOrBuilder();
+
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>.context.Timestamp timestamp = 10;</code>
+     * @return Whether the timestamp field is set.
      */
-    java.util.List<? extends context.ContextOuterClass.ServiceOrBuilder> 
-        getServicesOrBuilderList();
+    boolean hasTimestamp();
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>.context.Timestamp timestamp = 10;</code>
+     * @return The timestamp.
      */
-    context.ContextOuterClass.ServiceOrBuilder getServicesOrBuilder(
-        int index);
+    context.ContextOuterClass.Timestamp getTimestamp();
+    /**
+     * <code>.context.Timestamp timestamp = 10;</code>
+     */
+    context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder();
   }
   /**
-   * Protobuf type {@code context.ServiceList}
+   * Protobuf type {@code context.Slice}
    */
-  public static final class ServiceList extends
+  public static final class Slice extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ServiceList)
-      ServiceListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Slice)
+      SliceOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ServiceList.newBuilder() to construct.
-    private ServiceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Slice.newBuilder() to construct.
+    private Slice(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ServiceList() {
-      services_ = java.util.Collections.emptyList();
+    private Slice() {
+      name_ = "";
+      sliceEndpointIds_ = java.util.Collections.emptyList();
+      sliceConstraints_ = java.util.Collections.emptyList();
+      sliceServiceIds_ = java.util.Collections.emptyList();
+      sliceSubsliceIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ServiceList();
+      return new Slice();
     }
 
     @java.lang.Override
@@ -27461,7 +36105,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ServiceList(
+    private Slice(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -27469,7 +36113,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -27481,12 +36124,110 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
+              context.ContextOuterClass.SliceId.Builder subBuilder = null;
+              if (sliceId_ != null) {
+                subBuilder = sliceId_.toBuilder();
+              }
+              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceId_);
+                sliceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              name_ = s;
+              break;
+            }
+            case 26: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                services_ = new java.util.ArrayList<context.ContextOuterClass.Service>();
+                sliceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              services_.add(
-                  input.readMessage(context.ContextOuterClass.Service.parser(), extensionRegistry));
+              sliceEndpointIds_.add(
+                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
+              break;
+            }
+            case 34: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                sliceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              sliceConstraints_.add(
+                  input.readMessage(context.ContextOuterClass.Constraint.parser(), extensionRegistry));
+              break;
+            }
+            case 42: {
+              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
+                sliceServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              sliceServiceIds_.add(
+                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
+              break;
+            }
+            case 50: {
+              if (!((mutable_bitField0_ & 0x00000008) != 0)) {
+                sliceSubsliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>();
+                mutable_bitField0_ |= 0x00000008;
+              }
+              sliceSubsliceIds_.add(
+                  input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry));
+              break;
+            }
+            case 58: {
+              context.ContextOuterClass.SliceStatus.Builder subBuilder = null;
+              if (sliceStatus_ != null) {
+                subBuilder = sliceStatus_.toBuilder();
+              }
+              sliceStatus_ = input.readMessage(context.ContextOuterClass.SliceStatus.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceStatus_);
+                sliceStatus_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 66: {
+              context.ContextOuterClass.SliceConfig.Builder subBuilder = null;
+              if (sliceConfig_ != null) {
+                subBuilder = sliceConfig_.toBuilder();
+              }
+              sliceConfig_ = input.readMessage(context.ContextOuterClass.SliceConfig.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceConfig_);
+                sliceConfig_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 74: {
+              context.ContextOuterClass.SliceOwner.Builder subBuilder = null;
+              if (sliceOwner_ != null) {
+                subBuilder = sliceOwner_.toBuilder();
+              }
+              sliceOwner_ = input.readMessage(context.ContextOuterClass.SliceOwner.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceOwner_);
+                sliceOwner_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 82: {
+              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
+              if (timestamp_ != null) {
+                subBuilder = timestamp_.toBuilder();
+              }
+              timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(timestamp_);
+                timestamp_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -27505,7 +36246,16 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          services_ = java.util.Collections.unmodifiableList(services_);
+          sliceEndpointIds_ = java.util.Collections.unmodifiableList(sliceEndpointIds_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          sliceConstraints_ = java.util.Collections.unmodifiableList(sliceConstraints_);
+        }
+        if (((mutable_bitField0_ & 0x00000004) != 0)) {
+          sliceServiceIds_ = java.util.Collections.unmodifiableList(sliceServiceIds_);
+        }
+        if (((mutable_bitField0_ & 0x00000008) != 0)) {
+          sliceSubsliceIds_ = java.util.Collections.unmodifiableList(sliceSubsliceIds_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -27513,55 +36263,346 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ServiceList_descriptor;
+      return context.ContextOuterClass.internal_static_context_Slice_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ServiceList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Slice_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ServiceList.class, context.ContextOuterClass.ServiceList.Builder.class);
+              context.ContextOuterClass.Slice.class, context.ContextOuterClass.Slice.Builder.class);
+    }
+
+    public static final int SLICE_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.SliceId sliceId_;
+    /**
+     * <code>.context.SliceId slice_id = 1;</code>
+     * @return Whether the sliceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasSliceId() {
+      return sliceId_ != null;
+    }
+    /**
+     * <code>.context.SliceId slice_id = 1;</code>
+     * @return The sliceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceId getSliceId() {
+      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+    }
+    /**
+     * <code>.context.SliceId slice_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+      return getSliceId();
+    }
+
+    public static final int NAME_FIELD_NUMBER = 2;
+    private volatile java.lang.Object name_;
+    /**
+     * <code>string name = 2;</code>
+     * @return The name.
+     */
+    @java.lang.Override
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        name_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string name = 2;</code>
+     * @return The bytes for name.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int SLICE_ENDPOINT_IDS_FIELD_NUMBER = 3;
+    private java.util.List<context.ContextOuterClass.EndPointId> sliceEndpointIds_;
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.EndPointId> getSliceEndpointIdsList() {
+      return sliceEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getSliceEndpointIdsOrBuilderList() {
+      return sliceEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public int getSliceEndpointIdsCount() {
+      return sliceEndpointIds_.size();
+    }
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getSliceEndpointIds(int index) {
+      return sliceEndpointIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getSliceEndpointIdsOrBuilder(
+        int index) {
+      return sliceEndpointIds_.get(index);
+    }
+
+    public static final int SLICE_CONSTRAINTS_FIELD_NUMBER = 4;
+    private java.util.List<context.ContextOuterClass.Constraint> sliceConstraints_;
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.Constraint> getSliceConstraintsList() {
+      return sliceConstraints_;
+    }
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
+        getSliceConstraintsOrBuilderList() {
+      return sliceConstraints_;
+    }
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 4;</code>
+     */
+    @java.lang.Override
+    public int getSliceConstraintsCount() {
+      return sliceConstraints_.size();
+    }
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint getSliceConstraints(int index) {
+      return sliceConstraints_.get(index);
+    }
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConstraintOrBuilder getSliceConstraintsOrBuilder(
+        int index) {
+      return sliceConstraints_.get(index);
+    }
+
+    public static final int SLICE_SERVICE_IDS_FIELD_NUMBER = 5;
+    private java.util.List<context.ContextOuterClass.ServiceId> sliceServiceIds_;
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ServiceId> getSliceServiceIdsList() {
+      return sliceServiceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getSliceServiceIdsOrBuilderList() {
+      return sliceServiceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
+     */
+    @java.lang.Override
+    public int getSliceServiceIdsCount() {
+      return sliceServiceIds_.size();
+    }
+
+    public static final int SLICE_UUID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.Uuid sliceUuid_;
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getSliceServiceIds(int index) {
+      return sliceServiceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getSliceServiceIdsOrBuilder(
+        int index) {
+      return sliceServiceIds_.get(index);
+    }
+
+    public static final int SLICE_SUBSLICE_IDS_FIELD_NUMBER = 6;
+    private java.util.List<context.ContextOuterClass.SliceId> sliceSubsliceIds_;
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.SliceId> getSliceSubsliceIdsList() {
+      return sliceSubsliceIds_;
+    }
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+        getSliceSubsliceIdsOrBuilderList() {
+      return sliceSubsliceIds_;
+    }
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
+     */
+    @java.lang.Override
+    public int getSliceSubsliceIdsCount() {
+      return sliceSubsliceIds_.size();
+    }
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceId getSliceSubsliceIds(int index) {
+      return sliceSubsliceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceSubsliceIdsOrBuilder(
+        int index) {
+      return sliceSubsliceIds_.get(index);
+    }
+
+    public static final int SLICE_STATUS_FIELD_NUMBER = 7;
+    private context.ContextOuterClass.SliceStatus sliceStatus_;
+    /**
+     * <code>.context.SliceStatus slice_status = 7;</code>
+     * @return Whether the sliceStatus field is set.
+     */
+    @java.lang.Override
+    public boolean hasSliceStatus() {
+      return sliceStatus_ != null;
+    }
+    /**
+     * <code>.context.SliceStatus slice_status = 7;</code>
+     * @return The sliceStatus.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceStatus getSliceStatus() {
+      return sliceStatus_ == null ? context.ContextOuterClass.SliceStatus.getDefaultInstance() : sliceStatus_;
+    }
+    /**
+     * <code>.context.SliceStatus slice_status = 7;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceStatusOrBuilder getSliceStatusOrBuilder() {
+      return getSliceStatus();
+    }
+
+    public static final int SLICE_CONFIG_FIELD_NUMBER = 8;
+    private context.ContextOuterClass.SliceConfig sliceConfig_;
+    /**
+     * <code>.context.SliceConfig slice_config = 8;</code>
+     * @return Whether the sliceConfig field is set.
+     */
+    @java.lang.Override
+    public boolean hasSliceConfig() {
+      return sliceConfig_ != null;
+    }
+    /**
+     * <code>.context.SliceConfig slice_config = 8;</code>
+     * @return The sliceConfig.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceConfig getSliceConfig() {
+      return sliceConfig_ == null ? context.ContextOuterClass.SliceConfig.getDefaultInstance() : sliceConfig_;
+    }
+    /**
+     * <code>.context.SliceConfig slice_config = 8;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceConfigOrBuilder getSliceConfigOrBuilder() {
+      return getSliceConfig();
+    }
+
+    public static final int SLICE_OWNER_FIELD_NUMBER = 9;
+    private context.ContextOuterClass.SliceOwner sliceOwner_;
+    /**
+     * <code>.context.SliceOwner slice_owner = 9;</code>
+     * @return Whether the sliceOwner field is set.
+     */
+    @java.lang.Override
+    public boolean hasSliceOwner() {
+      return sliceOwner_ != null;
     }
-
-    public static final int SERVICES_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Service> services_;
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>.context.SliceOwner slice_owner = 9;</code>
+     * @return The sliceOwner.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Service> getServicesList() {
-      return services_;
+    public context.ContextOuterClass.SliceOwner getSliceOwner() {
+      return sliceOwner_ == null ? context.ContextOuterClass.SliceOwner.getDefaultInstance() : sliceOwner_;
     }
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>.context.SliceOwner slice_owner = 9;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ServiceOrBuilder> 
-        getServicesOrBuilderList() {
-      return services_;
+    public context.ContextOuterClass.SliceOwnerOrBuilder getSliceOwnerOrBuilder() {
+      return getSliceOwner();
     }
+
+    public static final int TIMESTAMP_FIELD_NUMBER = 10;
+    private context.ContextOuterClass.Timestamp timestamp_;
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>.context.Timestamp timestamp = 10;</code>
+     * @return Whether the timestamp field is set.
      */
     @java.lang.Override
-    public int getServicesCount() {
-      return services_.size();
+    public boolean hasTimestamp() {
+      return timestamp_ != null;
     }
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>.context.Timestamp timestamp = 10;</code>
+     * @return The timestamp.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Service getServices(int index) {
-      return services_.get(index);
+    public context.ContextOuterClass.Timestamp getTimestamp() {
+      return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
     }
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>.context.Timestamp timestamp = 10;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceOrBuilder getServicesOrBuilder(
-        int index) {
-      return services_.get(index);
+    public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
+      return getTimestamp();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -27578,8 +36619,35 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < services_.size(); i++) {
-        output.writeMessage(1, services_.get(i));
+      if (sliceId_ != null) {
+        output.writeMessage(1, getSliceId());
+      }
+      if (!getNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
+      }
+      for (int i = 0; i < sliceEndpointIds_.size(); i++) {
+        output.writeMessage(3, sliceEndpointIds_.get(i));
+      }
+      for (int i = 0; i < sliceConstraints_.size(); i++) {
+        output.writeMessage(4, sliceConstraints_.get(i));
+      }
+      for (int i = 0; i < sliceServiceIds_.size(); i++) {
+        output.writeMessage(5, sliceServiceIds_.get(i));
+      }
+      for (int i = 0; i < sliceSubsliceIds_.size(); i++) {
+        output.writeMessage(6, sliceSubsliceIds_.get(i));
+      }
+      if (sliceStatus_ != null) {
+        output.writeMessage(7, getSliceStatus());
+      }
+      if (sliceConfig_ != null) {
+        output.writeMessage(8, getSliceConfig());
+      }
+      if (sliceOwner_ != null) {
+        output.writeMessage(9, getSliceOwner());
+      }
+      if (timestamp_ != null) {
+        output.writeMessage(10, getTimestamp());
       }
       unknownFields.writeTo(output);
     }
@@ -27590,9 +36658,44 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < services_.size(); i++) {
+      if (sliceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, services_.get(i));
+          .computeMessageSize(1, getSliceId());
+      }
+      if (!getNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
+      }
+      for (int i = 0; i < sliceEndpointIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, sliceEndpointIds_.get(i));
+      }
+      for (int i = 0; i < sliceConstraints_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, sliceConstraints_.get(i));
+      }
+      for (int i = 0; i < sliceServiceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, sliceServiceIds_.get(i));
+      }
+      for (int i = 0; i < sliceSubsliceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, sliceSubsliceIds_.get(i));
+      }
+      if (sliceStatus_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(7, getSliceStatus());
+      }
+      if (sliceConfig_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(8, getSliceConfig());
+      }
+      if (sliceOwner_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(9, getSliceOwner());
+      }
+      if (timestamp_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(10, getTimestamp());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -27604,13 +36707,46 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ServiceList)) {
+      if (!(obj instanceof context.ContextOuterClass.Slice)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ServiceList other = (context.ContextOuterClass.ServiceList) obj;
+      context.ContextOuterClass.Slice other = (context.ContextOuterClass.Slice) obj;
 
-      if (!getServicesList()
-          .equals(other.getServicesList())) return false;
+      if (hasSliceId() != other.hasSliceId()) return false;
+      if (hasSliceId()) {
+        if (!getSliceId()
+            .equals(other.getSliceId())) return false;
+      }
+      if (!getName()
+          .equals(other.getName())) return false;
+      if (!getSliceEndpointIdsList()
+          .equals(other.getSliceEndpointIdsList())) return false;
+      if (!getSliceConstraintsList()
+          .equals(other.getSliceConstraintsList())) return false;
+      if (!getSliceServiceIdsList()
+          .equals(other.getSliceServiceIdsList())) return false;
+      if (!getSliceSubsliceIdsList()
+          .equals(other.getSliceSubsliceIdsList())) return false;
+      if (hasSliceStatus() != other.hasSliceStatus()) return false;
+      if (hasSliceStatus()) {
+        if (!getSliceStatus()
+            .equals(other.getSliceStatus())) return false;
+      }
+      if (hasSliceConfig() != other.hasSliceConfig()) return false;
+      if (hasSliceConfig()) {
+        if (!getSliceConfig()
+            .equals(other.getSliceConfig())) return false;
+      }
+      if (hasSliceOwner() != other.hasSliceOwner()) return false;
+      if (hasSliceOwner()) {
+        if (!getSliceOwner()
+            .equals(other.getSliceOwner())) return false;
+      }
+      if (hasTimestamp() != other.hasTimestamp()) return false;
+      if (hasTimestamp()) {
+        if (!getTimestamp()
+            .equals(other.getTimestamp())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -27622,78 +36758,112 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getServicesCount() > 0) {
-        hash = (37 * hash) + SERVICES_FIELD_NUMBER;
-        hash = (53 * hash) + getServicesList().hashCode();
+      if (hasSliceId()) {
+        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceId().hashCode();
+      }
+      hash = (37 * hash) + NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getName().hashCode();
+      if (getSliceEndpointIdsCount() > 0) {
+        hash = (37 * hash) + SLICE_ENDPOINT_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceEndpointIdsList().hashCode();
+      }
+      if (getSliceConstraintsCount() > 0) {
+        hash = (37 * hash) + SLICE_CONSTRAINTS_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceConstraintsList().hashCode();
+      }
+      if (getSliceServiceIdsCount() > 0) {
+        hash = (37 * hash) + SLICE_SERVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceServiceIdsList().hashCode();
+      }
+      if (getSliceSubsliceIdsCount() > 0) {
+        hash = (37 * hash) + SLICE_SUBSLICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceSubsliceIdsList().hashCode();
+      }
+      if (hasSliceStatus()) {
+        hash = (37 * hash) + SLICE_STATUS_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceStatus().hashCode();
+      }
+      if (hasSliceConfig()) {
+        hash = (37 * hash) + SLICE_CONFIG_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceConfig().hashCode();
+      }
+      if (hasSliceOwner()) {
+        hash = (37 * hash) + SLICE_OWNER_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceOwner().hashCode();
+      }
+      if (hasTimestamp()) {
+        hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
+        hash = (53 * hash) + getTimestamp().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ServiceList parseFrom(
+    public static context.ContextOuterClass.Slice parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceList parseFrom(
+    public static context.ContextOuterClass.Slice parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceList parseFrom(
+    public static context.ContextOuterClass.Slice parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceList parseFrom(
+    public static context.ContextOuterClass.Slice parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceList parseFrom(byte[] data)
+    public static context.ContextOuterClass.Slice parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceList parseFrom(
+    public static context.ContextOuterClass.Slice parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Slice parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceList parseFrom(
+    public static context.ContextOuterClass.Slice parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Slice parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceList parseDelimitedFrom(
+    public static context.ContextOuterClass.Slice parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceList parseFrom(
+    public static context.ContextOuterClass.Slice parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceList parseFrom(
+    public static context.ContextOuterClass.Slice parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -27706,7 +36876,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ServiceList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Slice prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -27722,26 +36892,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ServiceList}
+     * Protobuf type {@code context.Slice}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ServiceList)
-        context.ContextOuterClass.ServiceListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Slice)
+        context.ContextOuterClass.SliceOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ServiceList_descriptor;
+        return context.ContextOuterClass.internal_static_context_Slice_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ServiceList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Slice_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ServiceList.class, context.ContextOuterClass.ServiceList.Builder.class);
+                context.ContextOuterClass.Slice.class, context.ContextOuterClass.Slice.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ServiceList.newBuilder()
+      // Construct using context.ContextOuterClass.Slice.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -27754,17 +36924,70 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getServicesFieldBuilder();
+          getSliceEndpointIdsFieldBuilder();
+          getSliceConstraintsFieldBuilder();
+          getSliceServiceIdsFieldBuilder();
+          getSliceSubsliceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (servicesBuilder_ == null) {
-          services_ = java.util.Collections.emptyList();
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
+        }
+        name_ = "";
+
+        if (sliceEndpointIdsBuilder_ == null) {
+          sliceEndpointIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          servicesBuilder_.clear();
+          sliceEndpointIdsBuilder_.clear();
+        }
+        if (sliceConstraintsBuilder_ == null) {
+          sliceConstraints_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          sliceConstraintsBuilder_.clear();
+        }
+        if (sliceServiceIdsBuilder_ == null) {
+          sliceServiceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
+        } else {
+          sliceServiceIdsBuilder_.clear();
+        }
+        if (sliceSubsliceIdsBuilder_ == null) {
+          sliceSubsliceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000008);
+        } else {
+          sliceSubsliceIdsBuilder_.clear();
+        }
+        if (sliceStatusBuilder_ == null) {
+          sliceStatus_ = null;
+        } else {
+          sliceStatus_ = null;
+          sliceStatusBuilder_ = null;
+        }
+        if (sliceConfigBuilder_ == null) {
+          sliceConfig_ = null;
+        } else {
+          sliceConfig_ = null;
+          sliceConfigBuilder_ = null;
+        }
+        if (sliceOwnerBuilder_ == null) {
+          sliceOwner_ = null;
+        } else {
+          sliceOwner_ = null;
+          sliceOwnerBuilder_ = null;
+        }
+        if (timestampBuilder_ == null) {
+          timestamp_ = null;
+        } else {
+          timestamp_ = null;
+          timestampBuilder_ = null;
         }
         return this;
       }
@@ -27772,17 +36995,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ServiceList_descriptor;
+        return context.ContextOuterClass.internal_static_context_Slice_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceList getDefaultInstanceForType() {
-        return context.ContextOuterClass.ServiceList.getDefaultInstance();
+      public context.ContextOuterClass.Slice getDefaultInstanceForType() {
+        return context.ContextOuterClass.Slice.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceList build() {
-        context.ContextOuterClass.ServiceList result = buildPartial();
+      public context.ContextOuterClass.Slice build() {
+        context.ContextOuterClass.Slice result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -27790,17 +37013,70 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceList buildPartial() {
-        context.ContextOuterClass.ServiceList result = new context.ContextOuterClass.ServiceList(this);
+      public context.ContextOuterClass.Slice buildPartial() {
+        context.ContextOuterClass.Slice result = new context.ContextOuterClass.Slice(this);
         int from_bitField0_ = bitField0_;
-        if (servicesBuilder_ == null) {
+        if (sliceIdBuilder_ == null) {
+          result.sliceId_ = sliceId_;
+        } else {
+          result.sliceId_ = sliceIdBuilder_.build();
+        }
+        result.name_ = name_;
+        if (sliceEndpointIdsBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            services_ = java.util.Collections.unmodifiableList(services_);
+            sliceEndpointIds_ = java.util.Collections.unmodifiableList(sliceEndpointIds_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.services_ = services_;
+          result.sliceEndpointIds_ = sliceEndpointIds_;
         } else {
-          result.services_ = servicesBuilder_.build();
+          result.sliceEndpointIds_ = sliceEndpointIdsBuilder_.build();
+        }
+        if (sliceConstraintsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            sliceConstraints_ = java.util.Collections.unmodifiableList(sliceConstraints_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.sliceConstraints_ = sliceConstraints_;
+        } else {
+          result.sliceConstraints_ = sliceConstraintsBuilder_.build();
+        }
+        if (sliceServiceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000004) != 0)) {
+            sliceServiceIds_ = java.util.Collections.unmodifiableList(sliceServiceIds_);
+            bitField0_ = (bitField0_ & ~0x00000004);
+          }
+          result.sliceServiceIds_ = sliceServiceIds_;
+        } else {
+          result.sliceServiceIds_ = sliceServiceIdsBuilder_.build();
+        }
+        if (sliceSubsliceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000008) != 0)) {
+            sliceSubsliceIds_ = java.util.Collections.unmodifiableList(sliceSubsliceIds_);
+            bitField0_ = (bitField0_ & ~0x00000008);
+          }
+          result.sliceSubsliceIds_ = sliceSubsliceIds_;
+        } else {
+          result.sliceSubsliceIds_ = sliceSubsliceIdsBuilder_.build();
+        }
+        if (sliceStatusBuilder_ == null) {
+          result.sliceStatus_ = sliceStatus_;
+        } else {
+          result.sliceStatus_ = sliceStatusBuilder_.build();
+        }
+        if (sliceConfigBuilder_ == null) {
+          result.sliceConfig_ = sliceConfig_;
+        } else {
+          result.sliceConfig_ = sliceConfigBuilder_.build();
+        }
+        if (sliceOwnerBuilder_ == null) {
+          result.sliceOwner_ = sliceOwner_;
+        } else {
+          result.sliceOwner_ = sliceOwnerBuilder_.build();
+        }
+        if (timestampBuilder_ == null) {
+          result.timestamp_ = timestamp_;
+        } else {
+          result.timestamp_ = timestampBuilder_.build();
         }
         onBuilt();
         return result;
@@ -27840,42 +37116,139 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ServiceList) {
-          return mergeFrom((context.ContextOuterClass.ServiceList)other);
+        if (other instanceof context.ContextOuterClass.Slice) {
+          return mergeFrom((context.ContextOuterClass.Slice)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ServiceList other) {
-        if (other == context.ContextOuterClass.ServiceList.getDefaultInstance()) return this;
-        if (servicesBuilder_ == null) {
-          if (!other.services_.isEmpty()) {
-            if (services_.isEmpty()) {
-              services_ = other.services_;
+      public Builder mergeFrom(context.ContextOuterClass.Slice other) {
+        if (other == context.ContextOuterClass.Slice.getDefaultInstance()) return this;
+        if (other.hasSliceId()) {
+          mergeSliceId(other.getSliceId());
+        }
+        if (!other.getName().isEmpty()) {
+          name_ = other.name_;
+          onChanged();
+        }
+        if (sliceEndpointIdsBuilder_ == null) {
+          if (!other.sliceEndpointIds_.isEmpty()) {
+            if (sliceEndpointIds_.isEmpty()) {
+              sliceEndpointIds_ = other.sliceEndpointIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureServicesIsMutable();
-              services_.addAll(other.services_);
+              ensureSliceEndpointIdsIsMutable();
+              sliceEndpointIds_.addAll(other.sliceEndpointIds_);
             }
             onChanged();
           }
         } else {
-          if (!other.services_.isEmpty()) {
-            if (servicesBuilder_.isEmpty()) {
-              servicesBuilder_.dispose();
-              servicesBuilder_ = null;
-              services_ = other.services_;
+          if (!other.sliceEndpointIds_.isEmpty()) {
+            if (sliceEndpointIdsBuilder_.isEmpty()) {
+              sliceEndpointIdsBuilder_.dispose();
+              sliceEndpointIdsBuilder_ = null;
+              sliceEndpointIds_ = other.sliceEndpointIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              servicesBuilder_ = 
+              sliceEndpointIdsBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getServicesFieldBuilder() : null;
+                   getSliceEndpointIdsFieldBuilder() : null;
             } else {
-              servicesBuilder_.addAllMessages(other.services_);
+              sliceEndpointIdsBuilder_.addAllMessages(other.sliceEndpointIds_);
+            }
+          }
+        }
+        if (sliceConstraintsBuilder_ == null) {
+          if (!other.sliceConstraints_.isEmpty()) {
+            if (sliceConstraints_.isEmpty()) {
+              sliceConstraints_ = other.sliceConstraints_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureSliceConstraintsIsMutable();
+              sliceConstraints_.addAll(other.sliceConstraints_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.sliceConstraints_.isEmpty()) {
+            if (sliceConstraintsBuilder_.isEmpty()) {
+              sliceConstraintsBuilder_.dispose();
+              sliceConstraintsBuilder_ = null;
+              sliceConstraints_ = other.sliceConstraints_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              sliceConstraintsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSliceConstraintsFieldBuilder() : null;
+            } else {
+              sliceConstraintsBuilder_.addAllMessages(other.sliceConstraints_);
+            }
+          }
+        }
+        if (sliceServiceIdsBuilder_ == null) {
+          if (!other.sliceServiceIds_.isEmpty()) {
+            if (sliceServiceIds_.isEmpty()) {
+              sliceServiceIds_ = other.sliceServiceIds_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+            } else {
+              ensureSliceServiceIdsIsMutable();
+              sliceServiceIds_.addAll(other.sliceServiceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.sliceServiceIds_.isEmpty()) {
+            if (sliceServiceIdsBuilder_.isEmpty()) {
+              sliceServiceIdsBuilder_.dispose();
+              sliceServiceIdsBuilder_ = null;
+              sliceServiceIds_ = other.sliceServiceIds_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+              sliceServiceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSliceServiceIdsFieldBuilder() : null;
+            } else {
+              sliceServiceIdsBuilder_.addAllMessages(other.sliceServiceIds_);
+            }
+          }
+        }
+        if (sliceSubsliceIdsBuilder_ == null) {
+          if (!other.sliceSubsliceIds_.isEmpty()) {
+            if (sliceSubsliceIds_.isEmpty()) {
+              sliceSubsliceIds_ = other.sliceSubsliceIds_;
+              bitField0_ = (bitField0_ & ~0x00000008);
+            } else {
+              ensureSliceSubsliceIdsIsMutable();
+              sliceSubsliceIds_.addAll(other.sliceSubsliceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.sliceSubsliceIds_.isEmpty()) {
+            if (sliceSubsliceIdsBuilder_.isEmpty()) {
+              sliceSubsliceIdsBuilder_.dispose();
+              sliceSubsliceIdsBuilder_ = null;
+              sliceSubsliceIds_ = other.sliceSubsliceIds_;
+              bitField0_ = (bitField0_ & ~0x00000008);
+              sliceSubsliceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSliceSubsliceIdsFieldBuilder() : null;
+            } else {
+              sliceSubsliceIdsBuilder_.addAllMessages(other.sliceSubsliceIds_);
             }
           }
         }
+        if (other.hasSliceStatus()) {
+          mergeSliceStatus(other.getSliceStatus());
+        }
+        if (other.hasSliceConfig()) {
+          mergeSliceConfig(other.getSliceConfig());
+        }
+        if (other.hasSliceOwner()) {
+          mergeSliceOwner(other.getSliceOwner());
+        }
+        if (other.hasTimestamp()) {
+          mergeTimestamp(other.getTimestamp());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -27886,1920 +37259,1658 @@ public final class ContextOuterClass {
         return true;
       }
 
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.ServiceList parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ServiceList) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.Service> services_ =
-        java.util.Collections.emptyList();
-      private void ensureServicesIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          services_ = new java.util.ArrayList<context.ContextOuterClass.Service>(services_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Service, context.ContextOuterClass.Service.Builder, context.ContextOuterClass.ServiceOrBuilder> servicesBuilder_;
-
-      /**
-       * <code>repeated .context.Service services = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.Service> getServicesList() {
-        if (servicesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(services_);
-        } else {
-          return servicesBuilder_.getMessageList();
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Slice parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Slice) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
+        return this;
       }
+      private int bitField0_;
+
+      private context.ContextOuterClass.SliceId sliceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>.context.SliceId slice_id = 1;</code>
+       * @return Whether the sliceId field is set.
        */
-      public int getServicesCount() {
-        if (servicesBuilder_ == null) {
-          return services_.size();
-        } else {
-          return servicesBuilder_.getCount();
-        }
+      public boolean hasSliceId() {
+        return sliceIdBuilder_ != null || sliceId_ != null;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>.context.SliceId slice_id = 1;</code>
+       * @return The sliceId.
        */
-      public context.ContextOuterClass.Service getServices(int index) {
-        if (servicesBuilder_ == null) {
-          return services_.get(index);
+      public context.ContextOuterClass.SliceId getSliceId() {
+        if (sliceIdBuilder_ == null) {
+          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
         } else {
-          return servicesBuilder_.getMessage(index);
+          return sliceIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>.context.SliceId slice_id = 1;</code>
        */
-      public Builder setServices(
-          int index, context.ContextOuterClass.Service value) {
-        if (servicesBuilder_ == null) {
+      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureServicesIsMutable();
-          services_.set(index, value);
+          sliceId_ = value;
           onChanged();
         } else {
-          servicesBuilder_.setMessage(index, value);
+          sliceIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>.context.SliceId slice_id = 1;</code>
        */
-      public Builder setServices(
-          int index, context.ContextOuterClass.Service.Builder builderForValue) {
-        if (servicesBuilder_ == null) {
-          ensureServicesIsMutable();
-          services_.set(index, builderForValue.build());
+      public Builder setSliceId(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = builderForValue.build();
           onChanged();
         } else {
-          servicesBuilder_.setMessage(index, builderForValue.build());
+          sliceIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
+
+      private context.ContextOuterClass.Uuid sliceUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> sliceUuidBuilder_;
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>.context.SliceId slice_id = 1;</code>
        */
-      public Builder addServices(context.ContextOuterClass.Service value) {
-        if (servicesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (sliceId_ != null) {
+            sliceId_ =
+              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
+          } else {
+            sliceId_ = value;
           }
-          ensureServicesIsMutable();
-          services_.add(value);
           onChanged();
         } else {
-          servicesBuilder_.addMessage(value);
+          sliceIdBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>.context.SliceId slice_id = 1;</code>
        */
-      public Builder addServices(
-          int index, context.ContextOuterClass.Service value) {
-        if (servicesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServicesIsMutable();
-          services_.add(index, value);
+      public Builder clearSliceId() {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
           onChanged();
         } else {
-          servicesBuilder_.addMessage(index, value);
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>.context.SliceId slice_id = 1;</code>
        */
-      public Builder addServices(
-          context.ContextOuterClass.Service.Builder builderForValue) {
-        if (servicesBuilder_ == null) {
-          ensureServicesIsMutable();
-          services_.add(builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
+        
+        onChanged();
+        return getSliceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.SliceId slice_id = 1;</code>
+       */
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+        if (sliceIdBuilder_ != null) {
+          return sliceIdBuilder_.getMessageOrBuilder();
         } else {
-          servicesBuilder_.addMessage(builderForValue.build());
+          return sliceId_ == null ?
+              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>.context.SliceId slice_id = 1;</code>
        */
-      public Builder addServices(
-          int index, context.ContextOuterClass.Service.Builder builderForValue) {
-        if (servicesBuilder_ == null) {
-          ensureServicesIsMutable();
-          services_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          servicesBuilder_.addMessage(index, builderForValue.build());
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceIdFieldBuilder() {
+        if (sliceIdBuilder_ == null) {
+          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  getSliceId(),
+                  getParentForChildren(),
+                  isClean());
+          sliceId_ = null;
         }
-        return this;
+        return sliceIdBuilder_;
       }
+
+      private java.lang.Object name_ = "";
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>string name = 2;</code>
+       * @return The name.
        */
-      public Builder addAllServices(
-          java.lang.Iterable<? extends context.ContextOuterClass.Service> values) {
-        if (servicesBuilder_ == null) {
-          ensureServicesIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, services_);
-          onChanged();
+      public java.lang.String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          name_ = s;
+          return s;
         } else {
-          servicesBuilder_.addAllMessages(values);
+          return (java.lang.String) ref;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>string name = 2;</code>
+       * @return The bytes for name.
        */
-      public Builder clearServices() {
-        if (servicesBuilder_ == null) {
-          services_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
         } else {
-          servicesBuilder_.clear();
+          return (com.google.protobuf.ByteString) ref;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>string name = 2;</code>
+       * @param value The name to set.
+       * @return This builder for chaining.
        */
-      public Builder removeServices(int index) {
-        if (servicesBuilder_ == null) {
-          ensureServicesIsMutable();
-          services_.remove(index);
-          onChanged();
-        } else {
-          servicesBuilder_.remove(index);
-        }
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        name_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>string name = 2;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Service.Builder getServicesBuilder(
-          int index) {
-        return getServicesFieldBuilder().getBuilder(index);
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>string name = 2;</code>
+       * @param value The bytes for name to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ServiceOrBuilder getServicesOrBuilder(
-          int index) {
-        if (servicesBuilder_ == null) {
-          return services_.get(index);  } else {
-          return servicesBuilder_.getMessageOrBuilder(index);
-        }
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        name_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<context.ContextOuterClass.EndPointId> sliceEndpointIds_ =
+        java.util.Collections.emptyList();
+      private void ensureSliceEndpointIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          sliceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(sliceEndpointIds_);
+          bitField0_ |= 0x00000001;
+         }
       }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> sliceEndpointIdsBuilder_;
+
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ServiceOrBuilder> 
-           getServicesOrBuilderList() {
-        if (servicesBuilder_ != null) {
-          return servicesBuilder_.getMessageOrBuilderList();
+      public java.util.List<context.ContextOuterClass.EndPointId> getSliceEndpointIdsList() {
+        if (sliceEndpointIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(sliceEndpointIds_);
         } else {
-          return java.util.Collections.unmodifiableList(services_);
+          return sliceEndpointIdsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
        */
-      public context.ContextOuterClass.Service.Builder addServicesBuilder() {
-        return getServicesFieldBuilder().addBuilder(
-            context.ContextOuterClass.Service.getDefaultInstance());
+      public int getSliceEndpointIdsCount() {
+        if (sliceEndpointIdsBuilder_ == null) {
+          return sliceEndpointIds_.size();
+        } else {
+          return sliceEndpointIdsBuilder_.getCount();
+        }
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
        */
-      public context.ContextOuterClass.Service.Builder addServicesBuilder(
-          int index) {
-        return getServicesFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Service.getDefaultInstance());
+      public context.ContextOuterClass.EndPointId getSliceEndpointIds(int index) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          return sliceEndpointIds_.get(index);
+        } else {
+          return sliceEndpointIdsBuilder_.getMessage(index);
+        }
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
        */
-      public java.util.List<context.ContextOuterClass.Service.Builder> 
-           getServicesBuilderList() {
-        return getServicesFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Service, context.ContextOuterClass.Service.Builder, context.ContextOuterClass.ServiceOrBuilder> 
-          getServicesFieldBuilder() {
-        if (servicesBuilder_ == null) {
-          servicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Service, context.ContextOuterClass.Service.Builder, context.ContextOuterClass.ServiceOrBuilder>(
-                  services_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          services_ = null;
+      public Builder setSliceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceEndpointIdsIsMutable();
+          sliceEndpointIds_.set(index, value);
+          onChanged();
+        } else {
+          sliceEndpointIdsBuilder_.setMessage(index, value);
         }
-        return servicesBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
+        return this;
       }
-
-
-      // @@protoc_insertion_point(builder_scope:context.ServiceList)
-    }
-
-    // @@protoc_insertion_point(class_scope:context.ServiceList)
-    private static final context.ContextOuterClass.ServiceList DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceList();
-    }
-
-    public static context.ContextOuterClass.ServiceList getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<ServiceList>
-        PARSER = new com.google.protobuf.AbstractParser<ServiceList>() {
-      @java.lang.Override
-      public ServiceList parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ServiceList(input, extensionRegistry);
+      /**
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
+       */
+      public Builder setSliceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          ensureSliceEndpointIdsIsMutable();
+          sliceEndpointIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          sliceEndpointIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
       }
-    };
-
-    public static com.google.protobuf.Parser<ServiceList> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<ServiceList> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceList getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface ServiceEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ServiceEvent)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
-     */
-    boolean hasEvent();
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
-     */
-    context.ContextOuterClass.Event getEvent();
-    /**
-     * <code>.context.Event event = 1;</code>
-     */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
-
-    /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return Whether the serviceId field is set.
-     */
-    boolean hasServiceId();
-    /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return The serviceId.
-     */
-    context.ContextOuterClass.ServiceId getServiceId();
-    /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     */
-    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
-  }
-  /**
-   * Protobuf type {@code context.ServiceEvent}
-   */
-  public static final class ServiceEvent extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ServiceEvent)
-      ServiceEventOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use ServiceEvent.newBuilder() to construct.
-    private ServiceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private ServiceEvent() {
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new ServiceEvent();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private ServiceEvent(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
+      /**
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
+       */
+      public Builder addSliceEndpointIds(context.ContextOuterClass.EndPointId value) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceEndpointIdsIsMutable();
+          sliceEndpointIds_.add(value);
+          onChanged();
+        } else {
+          sliceEndpointIdsBuilder_.addMessage(value);
+        }
+        return this;
       }
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            case 10: {
-              context.ContextOuterClass.Event.Builder subBuilder = null;
-              if (event_ != null) {
-                subBuilder = event_.toBuilder();
-              }
-              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(event_);
-                event_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
-              if (serviceId_ != null) {
-                subBuilder = serviceId_.toBuilder();
-              }
-              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(serviceId_);
-                serviceId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
+      /**
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
+       */
+      public Builder addSliceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureSliceEndpointIdsIsMutable();
+          sliceEndpointIds_.add(index, value);
+          onChanged();
+        } else {
+          sliceEndpointIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
+       */
+      public Builder addSliceEndpointIds(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          ensureSliceEndpointIdsIsMutable();
+          sliceEndpointIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          sliceEndpointIdsBuilder_.addMessage(builderForValue.build());
         }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
+        return this;
       }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ServiceEvent_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ServiceEvent_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ServiceEvent.class, context.ContextOuterClass.ServiceEvent.Builder.class);
-    }
-
-    public static final int EVENT_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Event event_;
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
-     */
-    @java.lang.Override
-    public boolean hasEvent() {
-      return event_ != null;
-    }
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
-    }
-    /**
-     * <code>.context.Event event = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
-    }
-
-    public static final int SERVICE_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.ServiceId serviceId_;
-    /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return Whether the serviceId field is set.
-     */
-    @java.lang.Override
-    public boolean hasServiceId() {
-      return serviceId_ != null;
-    }
-    /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return The serviceId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceId getServiceId() {
-      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
-    }
-    /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-      return getServiceId();
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (event_ != null) {
-        output.writeMessage(1, getEvent());
+      /**
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
+       */
+      public Builder addSliceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          ensureSliceEndpointIdsIsMutable();
+          sliceEndpointIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          sliceEndpointIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
       }
-      if (serviceId_ != null) {
-        output.writeMessage(2, getServiceId());
+      /**
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
+       */
+      public Builder addAllSliceEndpointIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          ensureSliceEndpointIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, sliceEndpointIds_);
+          onChanged();
+        } else {
+          sliceEndpointIdsBuilder_.addAllMessages(values);
+        }
+        return this;
       }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (event_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
+      /**
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
+       */
+      public Builder clearSliceEndpointIds() {
+        if (sliceEndpointIdsBuilder_ == null) {
+          sliceEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          sliceEndpointIdsBuilder_.clear();
+        }
+        return this;
       }
-      if (serviceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getServiceId());
+      /**
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
+       */
+      public Builder removeSliceEndpointIds(int index) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          ensureSliceEndpointIdsIsMutable();
+          sliceEndpointIds_.remove(index);
+          onChanged();
+        } else {
+          sliceEndpointIdsBuilder_.remove(index);
+        }
+        return this;
       }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
+      /**
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getSliceEndpointIdsBuilder(
+          int index) {
+        return getSliceEndpointIdsFieldBuilder().getBuilder(index);
       }
-      if (!(obj instanceof context.ContextOuterClass.ServiceEvent)) {
-        return super.equals(obj);
+      /**
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getSliceEndpointIdsOrBuilder(
+          int index) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          return sliceEndpointIds_.get(index);  } else {
+          return sliceEndpointIdsBuilder_.getMessageOrBuilder(index);
+        }
       }
-      context.ContextOuterClass.ServiceEvent other = (context.ContextOuterClass.ServiceEvent) obj;
-
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) return false;
+      /**
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+           getSliceEndpointIdsOrBuilderList() {
+        if (sliceEndpointIdsBuilder_ != null) {
+          return sliceEndpointIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(sliceEndpointIds_);
+        }
       }
-      if (hasServiceId() != other.hasServiceId()) return false;
-      if (hasServiceId()) {
-        if (!getServiceId()
-            .equals(other.getServiceId())) return false;
+      /**
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addSliceEndpointIdsBuilder() {
+        return getSliceEndpointIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPointId.getDefaultInstance());
       }
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
+      /**
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addSliceEndpointIdsBuilder(
+          int index) {
+        return getSliceEndpointIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
       }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEvent()) {
-        hash = (37 * hash) + EVENT_FIELD_NUMBER;
-        hash = (53 * hash) + getEvent().hashCode();
+      /**
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
+           getSliceEndpointIdsBuilderList() {
+        return getSliceEndpointIdsFieldBuilder().getBuilderList();
       }
-      if (hasServiceId()) {
-        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceId().hashCode();
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getSliceEndpointIdsFieldBuilder() {
+        if (sliceEndpointIdsBuilder_ == null) {
+          sliceEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  sliceEndpointIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          sliceEndpointIds_ = null;
+        }
+        return sliceEndpointIdsBuilder_;
       }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
 
-    public static context.ContextOuterClass.ServiceEvent parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.ServiceEvent parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.ServiceEvent parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.ServiceEvent parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.ServiceEvent parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.ServiceEvent parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.ServiceEvent parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.ServiceEvent parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static context.ContextOuterClass.ServiceEvent parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.ServiceEvent parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static context.ContextOuterClass.ServiceEvent parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.ServiceEvent parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
+      private java.util.List<context.ContextOuterClass.Constraint> sliceConstraints_ =
+        java.util.Collections.emptyList();
+      private void ensureSliceConstraintsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          sliceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>(sliceConstraints_);
+          bitField0_ |= 0x00000002;
+         }
+      }
 
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(context.ContextOuterClass.ServiceEvent prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> sliceConstraintsBuilder_;
 
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code context.ServiceEvent}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ServiceEvent)
-        context.ContextOuterClass.ServiceEventOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ServiceEvent_descriptor;
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 4;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Constraint> getSliceConstraintsList() {
+        if (sliceConstraintsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(sliceConstraints_);
+        } else {
+          return sliceConstraintsBuilder_.getMessageList();
+        }
       }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ServiceEvent_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ServiceEvent.class, context.ContextOuterClass.ServiceEvent.Builder.class);
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 4;</code>
+       */
+      public int getSliceConstraintsCount() {
+        if (sliceConstraintsBuilder_ == null) {
+          return sliceConstraints_.size();
+        } else {
+          return sliceConstraintsBuilder_.getCount();
+        }
       }
-
-      // Construct using context.ContextOuterClass.ServiceEvent.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 4;</code>
+       */
+      public context.ContextOuterClass.Constraint getSliceConstraints(int index) {
+        if (sliceConstraintsBuilder_ == null) {
+          return sliceConstraints_.get(index);
+        } else {
+          return sliceConstraintsBuilder_.getMessage(index);
+        }
       }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 4;</code>
+       */
+      public Builder setSliceConstraints(
+          int index, context.ContextOuterClass.Constraint value) {
+        if (sliceConstraintsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceConstraintsIsMutable();
+          sliceConstraints_.set(index, value);
+          onChanged();
+        } else {
+          sliceConstraintsBuilder_.setMessage(index, value);
+        }
+        return this;
       }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 4;</code>
+       */
+      public Builder setSliceConstraints(
+          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
+        if (sliceConstraintsBuilder_ == null) {
+          ensureSliceConstraintsIsMutable();
+          sliceConstraints_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          sliceConstraintsBuilder_.setMessage(index, builderForValue.build());
         }
+        return this;
       }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 4;</code>
+       */
+      public Builder addSliceConstraints(context.ContextOuterClass.Constraint value) {
+        if (sliceConstraintsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceConstraintsIsMutable();
+          sliceConstraints_.add(value);
+          onChanged();
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          sliceConstraintsBuilder_.addMessage(value);
         }
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 4;</code>
+       */
+      public Builder addSliceConstraints(
+          int index, context.ContextOuterClass.Constraint value) {
+        if (sliceConstraintsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceConstraintsIsMutable();
+          sliceConstraints_.add(index, value);
+          onChanged();
         } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
+          sliceConstraintsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 4;</code>
+       */
+      public Builder addSliceConstraints(
+          context.ContextOuterClass.Constraint.Builder builderForValue) {
+        if (sliceConstraintsBuilder_ == null) {
+          ensureSliceConstraintsIsMutable();
+          sliceConstraints_.add(builderForValue.build());
+          onChanged();
+        } else {
+          sliceConstraintsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 4;</code>
+       */
+      public Builder addSliceConstraints(
+          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
+        if (sliceConstraintsBuilder_ == null) {
+          ensureSliceConstraintsIsMutable();
+          sliceConstraints_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          sliceConstraintsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 4;</code>
+       */
+      public Builder addAllSliceConstraints(
+          java.lang.Iterable<? extends context.ContextOuterClass.Constraint> values) {
+        if (sliceConstraintsBuilder_ == null) {
+          ensureSliceConstraintsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, sliceConstraints_);
+          onChanged();
+        } else {
+          sliceConstraintsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 4;</code>
+       */
+      public Builder clearSliceConstraints() {
+        if (sliceConstraintsBuilder_ == null) {
+          sliceConstraints_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          sliceConstraintsBuilder_.clear();
         }
         return this;
       }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ServiceEvent_descriptor;
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 4;</code>
+       */
+      public Builder removeSliceConstraints(int index) {
+        if (sliceConstraintsBuilder_ == null) {
+          ensureSliceConstraintsIsMutable();
+          sliceConstraints_.remove(index);
+          onChanged();
+        } else {
+          sliceConstraintsBuilder_.remove(index);
+        }
+        return this;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.ServiceEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.ServiceEvent.getDefaultInstance();
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 4;</code>
+       */
+      public context.ContextOuterClass.Constraint.Builder getSliceConstraintsBuilder(
+          int index) {
+        return getSliceConstraintsFieldBuilder().getBuilder(index);
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.ServiceEvent build() {
-        context.ContextOuterClass.ServiceEvent result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 4;</code>
+       */
+      public context.ContextOuterClass.ConstraintOrBuilder getSliceConstraintsOrBuilder(
+          int index) {
+        if (sliceConstraintsBuilder_ == null) {
+          return sliceConstraints_.get(index);  } else {
+          return sliceConstraintsBuilder_.getMessageOrBuilder(index);
         }
-        return result;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.ServiceEvent buildPartial() {
-        context.ContextOuterClass.ServiceEvent result = new context.ContextOuterClass.ServiceEvent(this);
-        if (eventBuilder_ == null) {
-          result.event_ = event_;
-        } else {
-          result.event_ = eventBuilder_.build();
-        }
-        if (serviceIdBuilder_ == null) {
-          result.serviceId_ = serviceId_;
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 4;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
+           getSliceConstraintsOrBuilderList() {
+        if (sliceConstraintsBuilder_ != null) {
+          return sliceConstraintsBuilder_.getMessageOrBuilderList();
         } else {
-          result.serviceId_ = serviceIdBuilder_.build();
+          return java.util.Collections.unmodifiableList(sliceConstraints_);
         }
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
       }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 4;</code>
+       */
+      public context.ContextOuterClass.Constraint.Builder addSliceConstraintsBuilder() {
+        return getSliceConstraintsFieldBuilder().addBuilder(
+            context.ContextOuterClass.Constraint.getDefaultInstance());
       }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 4;</code>
+       */
+      public context.ContextOuterClass.Constraint.Builder addSliceConstraintsBuilder(
+          int index) {
+        return getSliceConstraintsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Constraint.getDefaultInstance());
       }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 4;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Constraint.Builder> 
+           getSliceConstraintsBuilderList() {
+        return getSliceConstraintsFieldBuilder().getBuilderList();
       }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> 
+          getSliceConstraintsFieldBuilder() {
+        if (sliceConstraintsBuilder_ == null) {
+          sliceConstraintsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder>(
+                  sliceConstraints_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          sliceConstraints_ = null;
+        }
+        return sliceConstraintsBuilder_;
       }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+
+      private java.util.List<context.ContextOuterClass.ServiceId> sliceServiceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureSliceServiceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000004) != 0)) {
+          sliceServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(sliceServiceIds_);
+          bitField0_ |= 0x00000004;
+         }
       }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ServiceEvent) {
-          return mergeFrom((context.ContextOuterClass.ServiceEvent)other);
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> sliceServiceIdsBuilder_;
+
+      /**
+       * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId> getSliceServiceIdsList() {
+        if (sliceServiceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(sliceServiceIds_);
         } else {
-          super.mergeFrom(other);
-          return this;
+          return sliceServiceIdsBuilder_.getMessageList();
         }
       }
-
-      public Builder mergeFrom(context.ContextOuterClass.ServiceEvent other) {
-        if (other == context.ContextOuterClass.ServiceEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
-        }
-        if (other.hasServiceId()) {
-          mergeServiceId(other.getServiceId());
+      /**
+       * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
+       */
+      public int getSliceServiceIdsCount() {
+        if (sliceServiceIdsBuilder_ == null) {
+          return sliceServiceIds_.size();
+        } else {
+          return sliceServiceIdsBuilder_.getCount();
         }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
       }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      /**
+       * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
+       */
+      public context.ContextOuterClass.ServiceId getSliceServiceIds(int index) {
+        if (sliceServiceIdsBuilder_ == null) {
+          return sliceServiceIds_.get(index);
+        } else {
+          return sliceServiceIdsBuilder_.getMessage(index);
+        }
       }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.ServiceEvent parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ServiceEvent) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
+      /**
+       * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
+       */
+      public Builder setSliceServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (sliceServiceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureSliceServiceIdsIsMutable();
+          sliceServiceIds_.set(index, value);
+          onChanged();
+        } else {
+          sliceServiceIdsBuilder_.setMessage(index, value);
         }
         return this;
       }
-
-      private context.ContextOuterClass.Event event_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return Whether the event field is set.
+       * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
        */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
+      public Builder setSliceServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (sliceServiceIdsBuilder_ == null) {
+          ensureSliceServiceIdsIsMutable();
+          sliceServiceIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          sliceServiceIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
+       * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
        */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+      public Builder addSliceServiceIds(context.ContextOuterClass.ServiceId value) {
+        if (sliceServiceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceServiceIdsIsMutable();
+          sliceServiceIds_.add(value);
+          onChanged();
         } else {
-          return eventBuilder_.getMessage();
+          sliceServiceIdsBuilder_.addMessage(value);
         }
+        return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
        */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
+      public Builder addSliceServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (sliceServiceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          event_ = value;
+          ensureSliceServiceIdsIsMutable();
+          sliceServiceIds_.add(index, value);
           onChanged();
         } else {
-          eventBuilder_.setMessage(value);
+          sliceServiceIdsBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
        */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
+      public Builder addSliceServiceIds(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (sliceServiceIdsBuilder_ == null) {
+          ensureSliceServiceIdsIsMutable();
+          sliceServiceIds_.add(builderForValue.build());
           onChanged();
         } else {
-          eventBuilder_.setMessage(builderForValue.build());
+          sliceServiceIdsBuilder_.addMessage(builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
        */
-      public Builder mergeEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
-          if (event_ != null) {
-            event_ =
-              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
-          } else {
-            event_ = value;
-          }
+      public Builder addSliceServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (sliceServiceIdsBuilder_ == null) {
+          ensureSliceServiceIdsIsMutable();
+          sliceServiceIds_.add(index, builderForValue.build());
           onChanged();
         } else {
-          eventBuilder_.mergeFrom(value);
+          sliceServiceIdsBuilder_.addMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
        */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
+      public Builder addAllSliceServiceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
+        if (sliceServiceIdsBuilder_ == null) {
+          ensureSliceServiceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, sliceServiceIds_);
           onChanged();
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          sliceServiceIdsBuilder_.addAllMessages(values);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
        */
-      public context.ContextOuterClass.Event.Builder getEventBuilder() {
-        
-        onChanged();
-        return getEventFieldBuilder().getBuilder();
+      public Builder clearSliceServiceIds() {
+        if (sliceServiceIdsBuilder_ == null) {
+          sliceServiceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
+          onChanged();
+        } else {
+          sliceServiceIdsBuilder_.clear();
+        }
+        return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
        */
-      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-        if (eventBuilder_ != null) {
-          return eventBuilder_.getMessageOrBuilder();
+      public Builder removeSliceServiceIds(int index) {
+        if (sliceServiceIdsBuilder_ == null) {
+          ensureSliceServiceIdsIsMutable();
+          sliceServiceIds_.remove(index);
+          onChanged();
         } else {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+          sliceServiceIdsBuilder_.remove(index);
         }
+        return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
-          getEventFieldBuilder() {
-        if (eventBuilder_ == null) {
-          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
-                  getEvent(),
+      public context.ContextOuterClass.ServiceId.Builder getSliceServiceIdsBuilder(
+          int index) {
+        return getSliceServiceIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getSliceServiceIdsOrBuilder(
+          int index) {
+        if (sliceServiceIdsBuilder_ == null) {
+          return sliceServiceIds_.get(index);  } else {
+          return sliceServiceIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+           getSliceServiceIdsOrBuilderList() {
+        if (sliceServiceIdsBuilder_ != null) {
+          return sliceServiceIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(sliceServiceIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addSliceServiceIdsBuilder() {
+        return getSliceServiceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addSliceServiceIdsBuilder(
+          int index) {
+        return getSliceServiceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ServiceId slice_service_ids = 5;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
+           getSliceServiceIdsBuilderList() {
+        return getSliceServiceIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getSliceServiceIdsFieldBuilder() {
+        if (sliceServiceIdsBuilder_ == null) {
+          sliceServiceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  sliceServiceIds_,
+                  ((bitField0_ & 0x00000004) != 0),
                   getParentForChildren(),
                   isClean());
-          event_ = null;
+          sliceServiceIds_ = null;
         }
-        return eventBuilder_;
+        return sliceServiceIdsBuilder_;
       }
 
-      private context.ContextOuterClass.ServiceId serviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
+      private java.util.List<context.ContextOuterClass.SliceId> sliceSubsliceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureSliceSubsliceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000008) != 0)) {
+          sliceSubsliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>(sliceSubsliceIds_);
+          bitField0_ |= 0x00000008;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceSubsliceIdsBuilder_;
+
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       * @return Whether the serviceId field is set.
+       * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
        */
-      public boolean hasServiceId() {
-        return serviceIdBuilder_ != null || serviceId_ != null;
+      public java.util.List<context.ContextOuterClass.SliceId> getSliceSubsliceIdsList() {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(sliceSubsliceIds_);
+        } else {
+          return sliceSubsliceIdsBuilder_.getMessageList();
+        }
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       * @return The serviceId.
+       * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
        */
-      public context.ContextOuterClass.ServiceId getServiceId() {
-        if (serviceIdBuilder_ == null) {
-          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+      public int getSliceSubsliceIdsCount() {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          return sliceSubsliceIds_.size();
         } else {
-          return serviceIdBuilder_.getMessage();
+          return sliceSubsliceIdsBuilder_.getCount();
         }
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
        */
-      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
+      public context.ContextOuterClass.SliceId getSliceSubsliceIds(int index) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          return sliceSubsliceIds_.get(index);
+        } else {
+          return sliceSubsliceIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
+       */
+      public Builder setSliceSubsliceIds(
+          int index, context.ContextOuterClass.SliceId value) {
+        if (sliceSubsliceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          serviceId_ = value;
+          ensureSliceSubsliceIdsIsMutable();
+          sliceSubsliceIds_.set(index, value);
           onChanged();
         } else {
-          serviceIdBuilder_.setMessage(value);
+          sliceSubsliceIdsBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
        */
-      public Builder setServiceId(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = builderForValue.build();
+      public Builder setSliceSubsliceIds(
+          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          ensureSliceSubsliceIdsIsMutable();
+          sliceSubsliceIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          sliceSubsliceIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
+       */
+      public Builder addSliceSubsliceIds(context.ContextOuterClass.SliceId value) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceSubsliceIdsIsMutable();
+          sliceSubsliceIds_.add(value);
+          onChanged();
+        } else {
+          sliceSubsliceIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
+       */
+      public Builder addSliceSubsliceIds(
+          int index, context.ContextOuterClass.SliceId value) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceSubsliceIdsIsMutable();
+          sliceSubsliceIds_.add(index, value);
+          onChanged();
+        } else {
+          sliceSubsliceIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
+       */
+      public Builder addSliceSubsliceIds(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          ensureSliceSubsliceIdsIsMutable();
+          sliceSubsliceIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          sliceSubsliceIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
+       */
+      public Builder addSliceSubsliceIds(
+          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          ensureSliceSubsliceIdsIsMutable();
+          sliceSubsliceIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          sliceSubsliceIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
+       */
+      public Builder addAllSliceSubsliceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.SliceId> values) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          ensureSliceSubsliceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, sliceSubsliceIds_);
           onChanged();
         } else {
-          serviceIdBuilder_.setMessage(builderForValue.build());
+          sliceSubsliceIdsBuilder_.addAllMessages(values);
         }
-
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
        */
-      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
-          if (serviceId_ != null) {
-            serviceId_ =
-              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
-          } else {
-            serviceId_ = value;
-          }
+      public Builder clearSliceSubsliceIds() {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          sliceSubsliceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000008);
           onChanged();
         } else {
-          serviceIdBuilder_.mergeFrom(value);
+          sliceSubsliceIdsBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
        */
-      public Builder clearServiceId() {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
+      public Builder removeSliceSubsliceIds(int index) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          ensureSliceSubsliceIdsIsMutable();
+          sliceSubsliceIds_.remove(index);
           onChanged();
         } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
+          sliceSubsliceIdsBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
        */
-      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
-        
-        onChanged();
-        return getServiceIdFieldBuilder().getBuilder();
+      public context.ContextOuterClass.SliceId.Builder getSliceSubsliceIdsBuilder(
+          int index) {
+        return getSliceSubsliceIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
        */
-      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-        if (serviceIdBuilder_ != null) {
-          return serviceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return serviceId_ == null ?
-              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceSubsliceIdsOrBuilder(
+          int index) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          return sliceSubsliceIds_.get(index);  } else {
+          return sliceSubsliceIdsBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getServiceIdFieldBuilder() {
-        if (serviceIdBuilder_ == null) {
-          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  getServiceId(),
-                  getParentForChildren(),
-                  isClean());
-          serviceId_ = null;
-        }
-        return serviceIdBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:context.ServiceEvent)
-    }
-
-    // @@protoc_insertion_point(class_scope:context.ServiceEvent)
-    private static final context.ContextOuterClass.ServiceEvent DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceEvent();
-    }
-
-    public static context.ContextOuterClass.ServiceEvent getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<ServiceEvent>
-        PARSER = new com.google.protobuf.AbstractParser<ServiceEvent>() {
-      @java.lang.Override
-      public ServiceEvent parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ServiceEvent(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<ServiceEvent> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<ServiceEvent> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceEvent getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface SliceIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceId)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return Whether the contextId field is set.
-     */
-    boolean hasContextId();
-    /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return The contextId.
-     */
-    context.ContextOuterClass.ContextId getContextId();
-    /**
-     * <code>.context.ContextId context_id = 1;</code>
-     */
-    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
-
-    /**
-     * <code>.context.Uuid slice_uuid = 2;</code>
-     * @return Whether the sliceUuid field is set.
-     */
-    boolean hasSliceUuid();
-    /**
-     * <code>.context.Uuid slice_uuid = 2;</code>
-     * @return The sliceUuid.
-     */
-    context.ContextOuterClass.Uuid getSliceUuid();
-    /**
-     * <code>.context.Uuid slice_uuid = 2;</code>
-     */
-    context.ContextOuterClass.UuidOrBuilder getSliceUuidOrBuilder();
-  }
-  /**
-   * <pre>
-   * ----- Slice ---------------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.SliceId}
-   */
-  public static final class SliceId extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceId)
-      SliceIdOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use SliceId.newBuilder() to construct.
-    private SliceId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private SliceId() {
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new SliceId();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private SliceId(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            case 10: {
-              context.ContextOuterClass.ContextId.Builder subBuilder = null;
-              if (contextId_ != null) {
-                subBuilder = contextId_.toBuilder();
-              }
-              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(contextId_);
-                contextId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (sliceUuid_ != null) {
-                subBuilder = sliceUuid_.toBuilder();
-              }
-              sliceUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(sliceUuid_);
-                sliceUuid_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
+      public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+           getSliceSubsliceIdsOrBuilderList() {
+        if (sliceSubsliceIdsBuilder_ != null) {
+          return sliceSubsliceIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(sliceSubsliceIds_);
         }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_SliceId_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_SliceId_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceId.class, context.ContextOuterClass.SliceId.Builder.class);
-    }
-
-    public static final int CONTEXT_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.ContextId contextId_;
-    /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return Whether the contextId field is set.
-     */
-    @java.lang.Override
-    public boolean hasContextId() {
-      return contextId_ != null;
-    }
-    /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return The contextId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ContextId getContextId() {
-      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
-    }
-    /**
-     * <code>.context.ContextId context_id = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-      return getContextId();
-    }
-
-    public static final int SLICE_UUID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.Uuid sliceUuid_;
-    /**
-     * <code>.context.Uuid slice_uuid = 2;</code>
-     * @return Whether the sliceUuid field is set.
-     */
-    @java.lang.Override
-    public boolean hasSliceUuid() {
-      return sliceUuid_ != null;
-    }
-    /**
-     * <code>.context.Uuid slice_uuid = 2;</code>
-     * @return The sliceUuid.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Uuid getSliceUuid() {
-      return sliceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : sliceUuid_;
-    }
-    /**
-     * <code>.context.Uuid slice_uuid = 2;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getSliceUuidOrBuilder() {
-      return getSliceUuid();
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (contextId_ != null) {
-        output.writeMessage(1, getContextId());
-      }
-      if (sliceUuid_ != null) {
-        output.writeMessage(2, getSliceUuid());
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (contextId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getContextId());
-      }
-      if (sliceUuid_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getSliceUuid());
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof context.ContextOuterClass.SliceId)) {
-        return super.equals(obj);
-      }
-      context.ContextOuterClass.SliceId other = (context.ContextOuterClass.SliceId) obj;
-
-      if (hasContextId() != other.hasContextId()) return false;
-      if (hasContextId()) {
-        if (!getContextId()
-            .equals(other.getContextId())) return false;
-      }
-      if (hasSliceUuid() != other.hasSliceUuid()) return false;
-      if (hasSliceUuid()) {
-        if (!getSliceUuid()
-            .equals(other.getSliceUuid())) return false;
-      }
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasContextId()) {
-        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getContextId().hashCode();
       }
-      if (hasSliceUuid()) {
-        hash = (37 * hash) + SLICE_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceUuid().hashCode();
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
+       */
+      public context.ContextOuterClass.SliceId.Builder addSliceSubsliceIdsBuilder() {
+        return getSliceSubsliceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.SliceId.getDefaultInstance());
       }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static context.ContextOuterClass.SliceId parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.SliceId parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.SliceId parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.SliceId parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.SliceId parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.SliceId parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.SliceId parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.SliceId parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static context.ContextOuterClass.SliceId parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.SliceId parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static context.ContextOuterClass.SliceId parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.SliceId parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(context.ContextOuterClass.SliceId prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * <pre>
-     * ----- Slice ---------------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.SliceId}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.SliceId)
-        context.ContextOuterClass.SliceIdOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_SliceId_descriptor;
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
+       */
+      public context.ContextOuterClass.SliceId.Builder addSliceSubsliceIdsBuilder(
+          int index) {
+        return getSliceSubsliceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.SliceId.getDefaultInstance());
       }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_SliceId_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceId.class, context.ContextOuterClass.SliceId.Builder.class);
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
+       */
+      public java.util.List<context.ContextOuterClass.SliceId.Builder> 
+           getSliceSubsliceIdsBuilderList() {
+        return getSliceSubsliceIdsFieldBuilder().getBuilderList();
       }
-
-      // Construct using context.ContextOuterClass.SliceId.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceSubsliceIdsFieldBuilder() {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          sliceSubsliceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  sliceSubsliceIds_,
+                  ((bitField0_ & 0x00000008) != 0),
+                  getParentForChildren(),
+                  isClean());
+          sliceSubsliceIds_ = null;
+        }
+        return sliceSubsliceIdsBuilder_;
       }
 
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
+      private context.ContextOuterClass.SliceStatus sliceStatus_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceStatus, context.ContextOuterClass.SliceStatus.Builder, context.ContextOuterClass.SliceStatusOrBuilder> sliceStatusBuilder_;
+      /**
+       * <code>.context.SliceStatus slice_status = 7;</code>
+       * @return Whether the sliceStatus field is set.
+       */
+      public boolean hasSliceStatus() {
+        return sliceStatusBuilder_ != null || sliceStatus_ != null;
       }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
+      /**
+       * <code>.context.SliceStatus slice_status = 7;</code>
+       * @return The sliceStatus.
+       */
+      public context.ContextOuterClass.SliceStatus getSliceStatus() {
+        if (sliceStatusBuilder_ == null) {
+          return sliceStatus_ == null ? context.ContextOuterClass.SliceStatus.getDefaultInstance() : sliceStatus_;
+        } else {
+          return sliceStatusBuilder_.getMessage();
         }
       }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (contextIdBuilder_ == null) {
-          contextId_ = null;
+      /**
+       * <code>.context.SliceStatus slice_status = 7;</code>
+       */
+      public Builder setSliceStatus(context.ContextOuterClass.SliceStatus value) {
+        if (sliceStatusBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sliceStatus_ = value;
+          onChanged();
         } else {
-          contextId_ = null;
-          contextIdBuilder_ = null;
+          sliceStatusBuilder_.setMessage(value);
         }
-        if (sliceUuidBuilder_ == null) {
-          sliceUuid_ = null;
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceStatus slice_status = 7;</code>
+       */
+      public Builder setSliceStatus(
+          context.ContextOuterClass.SliceStatus.Builder builderForValue) {
+        if (sliceStatusBuilder_ == null) {
+          sliceStatus_ = builderForValue.build();
+          onChanged();
         } else {
-          sliceUuid_ = null;
-          sliceUuidBuilder_ = null;
+          sliceStatusBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
+      /**
+       * <code>.context.SliceStatus slice_status = 7;</code>
+       */
+      public Builder mergeSliceStatus(context.ContextOuterClass.SliceStatus value) {
+        if (sliceStatusBuilder_ == null) {
+          if (sliceStatus_ != null) {
+            sliceStatus_ =
+              context.ContextOuterClass.SliceStatus.newBuilder(sliceStatus_).mergeFrom(value).buildPartial();
+          } else {
+            sliceStatus_ = value;
+          }
+          onChanged();
+        } else {
+          sliceStatusBuilder_.mergeFrom(value);
+        }
 
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_SliceId_descriptor;
+        return this;
       }
+      /**
+       * <code>.context.SliceStatus slice_status = 7;</code>
+       */
+      public Builder clearSliceStatus() {
+        if (sliceStatusBuilder_ == null) {
+          sliceStatus_ = null;
+          onChanged();
+        } else {
+          sliceStatus_ = null;
+          sliceStatusBuilder_ = null;
+        }
 
-      @java.lang.Override
-      public context.ContextOuterClass.SliceId getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceId.getDefaultInstance();
+        return this;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.SliceId build() {
-        context.ContextOuterClass.SliceId result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
+      /**
+       * <code>.context.SliceStatus slice_status = 7;</code>
+       */
+      public context.ContextOuterClass.SliceStatus.Builder getSliceStatusBuilder() {
+        
+        onChanged();
+        return getSliceStatusFieldBuilder().getBuilder();
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.SliceId buildPartial() {
-        context.ContextOuterClass.SliceId result = new context.ContextOuterClass.SliceId(this);
-        if (contextIdBuilder_ == null) {
-          result.contextId_ = contextId_;
+      /**
+       * <code>.context.SliceStatus slice_status = 7;</code>
+       */
+      public context.ContextOuterClass.SliceStatusOrBuilder getSliceStatusOrBuilder() {
+        if (sliceStatusBuilder_ != null) {
+          return sliceStatusBuilder_.getMessageOrBuilder();
         } else {
-          result.contextId_ = contextIdBuilder_.build();
+          return sliceStatus_ == null ?
+              context.ContextOuterClass.SliceStatus.getDefaultInstance() : sliceStatus_;
         }
-        if (sliceUuidBuilder_ == null) {
-          result.sliceUuid_ = sliceUuid_;
-        } else {
-          result.sliceUuid_ = sliceUuidBuilder_.build();
+      }
+      /**
+       * <code>.context.SliceStatus slice_status = 7;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceStatus, context.ContextOuterClass.SliceStatus.Builder, context.ContextOuterClass.SliceStatusOrBuilder> 
+          getSliceStatusFieldBuilder() {
+        if (sliceStatusBuilder_ == null) {
+          sliceStatusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceStatus, context.ContextOuterClass.SliceStatus.Builder, context.ContextOuterClass.SliceStatusOrBuilder>(
+                  getSliceStatus(),
+                  getParentForChildren(),
+                  isClean());
+          sliceStatus_ = null;
         }
-        onBuilt();
-        return result;
+        return sliceStatusBuilder_;
       }
 
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+      private context.ContextOuterClass.SliceConfig sliceConfig_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceConfig, context.ContextOuterClass.SliceConfig.Builder, context.ContextOuterClass.SliceConfigOrBuilder> sliceConfigBuilder_;
+      /**
+       * <code>.context.SliceConfig slice_config = 8;</code>
+       * @return Whether the sliceConfig field is set.
+       */
+      public boolean hasSliceConfig() {
+        return sliceConfigBuilder_ != null || sliceConfig_ != null;
       }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.SliceId) {
-          return mergeFrom((context.ContextOuterClass.SliceId)other);
+      /**
+       * <code>.context.SliceConfig slice_config = 8;</code>
+       * @return The sliceConfig.
+       */
+      public context.ContextOuterClass.SliceConfig getSliceConfig() {
+        if (sliceConfigBuilder_ == null) {
+          return sliceConfig_ == null ? context.ContextOuterClass.SliceConfig.getDefaultInstance() : sliceConfig_;
         } else {
-          super.mergeFrom(other);
-          return this;
+          return sliceConfigBuilder_.getMessage();
         }
       }
-
-      public Builder mergeFrom(context.ContextOuterClass.SliceId other) {
-        if (other == context.ContextOuterClass.SliceId.getDefaultInstance()) return this;
-        if (other.hasContextId()) {
-          mergeContextId(other.getContextId());
-        }
-        if (other.hasSliceUuid()) {
-          mergeSliceUuid(other.getSliceUuid());
+      /**
+       * <code>.context.SliceConfig slice_config = 8;</code>
+       */
+      public Builder setSliceConfig(context.ContextOuterClass.SliceConfig value) {
+        if (sliceConfigBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sliceConfig_ = value;
+          onChanged();
+        } else {
+          sliceConfigBuilder_.setMessage(value);
         }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
+
         return this;
       }
+      /**
+       * <code>.context.SliceConfig slice_config = 8;</code>
+       */
+      public Builder setSliceConfig(
+          context.ContextOuterClass.SliceConfig.Builder builderForValue) {
+        if (sliceConfigBuilder_ == null) {
+          sliceConfig_ = builderForValue.build();
+          onChanged();
+        } else {
+          sliceConfigBuilder_.setMessage(builderForValue.build());
+        }
 
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+        return this;
       }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.SliceId parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceId) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
+      /**
+       * <code>.context.SliceConfig slice_config = 8;</code>
+       */
+      public Builder mergeSliceConfig(context.ContextOuterClass.SliceConfig value) {
+        if (sliceConfigBuilder_ == null) {
+          if (sliceConfig_ != null) {
+            sliceConfig_ =
+              context.ContextOuterClass.SliceConfig.newBuilder(sliceConfig_).mergeFrom(value).buildPartial();
+          } else {
+            sliceConfig_ = value;
           }
+          onChanged();
+        } else {
+          sliceConfigBuilder_.mergeFrom(value);
         }
+
         return this;
       }
+      /**
+       * <code>.context.SliceConfig slice_config = 8;</code>
+       */
+      public Builder clearSliceConfig() {
+        if (sliceConfigBuilder_ == null) {
+          sliceConfig_ = null;
+          onChanged();
+        } else {
+          sliceConfig_ = null;
+          sliceConfigBuilder_ = null;
+        }
 
-      private context.ContextOuterClass.ContextId contextId_;
+        return this;
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 8;</code>
+       */
+      public context.ContextOuterClass.SliceConfig.Builder getSliceConfigBuilder() {
+        
+        onChanged();
+        return getSliceConfigFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 8;</code>
+       */
+      public context.ContextOuterClass.SliceConfigOrBuilder getSliceConfigOrBuilder() {
+        if (sliceConfigBuilder_ != null) {
+          return sliceConfigBuilder_.getMessageOrBuilder();
+        } else {
+          return sliceConfig_ == null ?
+              context.ContextOuterClass.SliceConfig.getDefaultInstance() : sliceConfig_;
+        }
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 8;</code>
+       */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
+          context.ContextOuterClass.SliceConfig, context.ContextOuterClass.SliceConfig.Builder, context.ContextOuterClass.SliceConfigOrBuilder> 
+          getSliceConfigFieldBuilder() {
+        if (sliceConfigBuilder_ == null) {
+          sliceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceConfig, context.ContextOuterClass.SliceConfig.Builder, context.ContextOuterClass.SliceConfigOrBuilder>(
+                  getSliceConfig(),
+                  getParentForChildren(),
+                  isClean());
+          sliceConfig_ = null;
+        }
+        return sliceConfigBuilder_;
+      }
+
+      private context.ContextOuterClass.SliceOwner sliceOwner_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceOwner, context.ContextOuterClass.SliceOwner.Builder, context.ContextOuterClass.SliceOwnerOrBuilder> sliceOwnerBuilder_;
       /**
-       * <code>.context.ContextId context_id = 1;</code>
-       * @return Whether the contextId field is set.
+       * <code>.context.SliceOwner slice_owner = 9;</code>
+       * @return Whether the sliceOwner field is set.
        */
-      public boolean hasContextId() {
-        return contextIdBuilder_ != null || contextId_ != null;
+      public boolean hasSliceOwner() {
+        return sliceOwnerBuilder_ != null || sliceOwner_ != null;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
-       * @return The contextId.
+       * <code>.context.SliceOwner slice_owner = 9;</code>
+       * @return The sliceOwner.
        */
-      public context.ContextOuterClass.ContextId getContextId() {
-        if (contextIdBuilder_ == null) {
-          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+      public context.ContextOuterClass.SliceOwner getSliceOwner() {
+        if (sliceOwnerBuilder_ == null) {
+          return sliceOwner_ == null ? context.ContextOuterClass.SliceOwner.getDefaultInstance() : sliceOwner_;
         } else {
-          return contextIdBuilder_.getMessage();
+          return sliceOwnerBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.SliceOwner slice_owner = 9;</code>
        */
-      public Builder setContextId(context.ContextOuterClass.ContextId value) {
-        if (contextIdBuilder_ == null) {
+      public Builder setSliceOwner(context.ContextOuterClass.SliceOwner value) {
+        if (sliceOwnerBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          contextId_ = value;
+          sliceOwner_ = value;
           onChanged();
         } else {
-          contextIdBuilder_.setMessage(value);
+          sliceOwnerBuilder_.setMessage(value);
         }
-
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.SliceOwner slice_owner = 9;</code>
        */
-      public Builder setContextId(
-          context.ContextOuterClass.ContextId.Builder builderForValue) {
-        if (contextIdBuilder_ == null) {
-          contextId_ = builderForValue.build();
+      public Builder setSliceOwner(
+          context.ContextOuterClass.SliceOwner.Builder builderForValue) {
+        if (sliceOwnerBuilder_ == null) {
+          sliceOwner_ = builderForValue.build();
           onChanged();
         } else {
-          contextIdBuilder_.setMessage(builderForValue.build());
+          sliceOwnerBuilder_.setMessage(builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.SliceOwner slice_owner = 9;</code>
        */
-      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
-        if (contextIdBuilder_ == null) {
-          if (contextId_ != null) {
-            contextId_ =
-              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+      public Builder mergeSliceOwner(context.ContextOuterClass.SliceOwner value) {
+        if (sliceOwnerBuilder_ == null) {
+          if (sliceOwner_ != null) {
+            sliceOwner_ =
+              context.ContextOuterClass.SliceOwner.newBuilder(sliceOwner_).mergeFrom(value).buildPartial();
           } else {
-            contextId_ = value;
+            sliceOwner_ = value;
           }
+          ensureSliceServiceIdsIsMutable();
+          sliceServiceIds_.add(value);
           onChanged();
         } else {
-          contextIdBuilder_.mergeFrom(value);
+          sliceOwnerBuilder_.mergeFrom(value);
         }
-
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.SliceOwner slice_owner = 9;</code>
        */
-      public Builder clearContextId() {
-        if (contextIdBuilder_ == null) {
-          contextId_ = null;
+      public Builder clearSliceOwner() {
+        if (sliceOwnerBuilder_ == null) {
+          sliceOwner_ = null;
           onChanged();
         } else {
-          contextId_ = null;
-          contextIdBuilder_ = null;
+          sliceOwner_ = null;
+          sliceOwnerBuilder_ = null;
         }
-
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.SliceOwner slice_owner = 9;</code>
        */
-      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+      public context.ContextOuterClass.SliceOwner.Builder getSliceOwnerBuilder() {
         
         onChanged();
-        return getContextIdFieldBuilder().getBuilder();
+        return getSliceOwnerFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.SliceOwner slice_owner = 9;</code>
        */
-      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-        if (contextIdBuilder_ != null) {
-          return contextIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.SliceOwnerOrBuilder getSliceOwnerOrBuilder() {
+        if (sliceOwnerBuilder_ != null) {
+          return sliceOwnerBuilder_.getMessageOrBuilder();
         } else {
-          return contextId_ == null ?
-              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+          return sliceOwner_ == null ?
+              context.ContextOuterClass.SliceOwner.getDefaultInstance() : sliceOwner_;
         }
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.SliceOwner slice_owner = 9;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
-          getContextIdFieldBuilder() {
-        if (contextIdBuilder_ == null) {
-          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
-                  getContextId(),
+          context.ContextOuterClass.SliceOwner, context.ContextOuterClass.SliceOwner.Builder, context.ContextOuterClass.SliceOwnerOrBuilder> 
+          getSliceOwnerFieldBuilder() {
+        if (sliceOwnerBuilder_ == null) {
+          sliceOwnerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceOwner, context.ContextOuterClass.SliceOwner.Builder, context.ContextOuterClass.SliceOwnerOrBuilder>(
+                  getSliceOwner(),
                   getParentForChildren(),
                   isClean());
-          contextId_ = null;
+          sliceOwner_ = null;
         }
-        return contextIdBuilder_;
+        return sliceOwnerBuilder_;
       }
 
-      private context.ContextOuterClass.Uuid sliceUuid_;
+      private context.ContextOuterClass.Timestamp timestamp_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> sliceUuidBuilder_;
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
-       * @return Whether the sliceUuid field is set.
+       * <code>.context.Timestamp timestamp = 10;</code>
+       * @return Whether the timestamp field is set.
        */
-      public boolean hasSliceUuid() {
-        return sliceUuidBuilder_ != null || sliceUuid_ != null;
+      public boolean hasTimestamp() {
+        return timestampBuilder_ != null || timestamp_ != null;
       }
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
-       * @return The sliceUuid.
+       * <code>.context.Timestamp timestamp = 10;</code>
+       * @return The timestamp.
        */
-      public context.ContextOuterClass.Uuid getSliceUuid() {
-        if (sliceUuidBuilder_ == null) {
-          return sliceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : sliceUuid_;
+      public context.ContextOuterClass.Timestamp getTimestamp() {
+        if (timestampBuilder_ == null) {
+          return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
         } else {
-          return sliceUuidBuilder_.getMessage();
+          return timestampBuilder_.getMessage();
         }
+        return this;
       }
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
+       * <code>.context.Timestamp timestamp = 10;</code>
        */
-      public Builder setSliceUuid(context.ContextOuterClass.Uuid value) {
-        if (sliceUuidBuilder_ == null) {
+      public Builder setTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (timestampBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          sliceUuid_ = value;
+          timestamp_ = value;
           onChanged();
         } else {
-          sliceUuidBuilder_.setMessage(value);
+          timestampBuilder_.setMessage(value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
+       * <code>.context.Timestamp timestamp = 10;</code>
        */
-      public Builder setSliceUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (sliceUuidBuilder_ == null) {
-          sliceUuid_ = builderForValue.build();
+      public Builder setTimestamp(
+          context.ContextOuterClass.Timestamp.Builder builderForValue) {
+        if (timestampBuilder_ == null) {
+          timestamp_ = builderForValue.build();
           onChanged();
         } else {
-          sliceUuidBuilder_.setMessage(builderForValue.build());
+          timestampBuilder_.setMessage(builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
+       * <code>.context.Timestamp timestamp = 10;</code>
        */
-      public Builder mergeSliceUuid(context.ContextOuterClass.Uuid value) {
-        if (sliceUuidBuilder_ == null) {
-          if (sliceUuid_ != null) {
-            sliceUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(sliceUuid_).mergeFrom(value).buildPartial();
+      public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (timestampBuilder_ == null) {
+          if (timestamp_ != null) {
+            timestamp_ =
+              context.ContextOuterClass.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
           } else {
-            sliceUuid_ = value;
+            timestamp_ = value;
           }
           onChanged();
         } else {
-          sliceUuidBuilder_.mergeFrom(value);
+          timestampBuilder_.mergeFrom(value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
+       * <code>.context.Timestamp timestamp = 10;</code>
        */
-      public Builder clearSliceUuid() {
-        if (sliceUuidBuilder_ == null) {
-          sliceUuid_ = null;
+      public Builder clearTimestamp() {
+        if (timestampBuilder_ == null) {
+          timestamp_ = null;
           onChanged();
         } else {
-          sliceUuid_ = null;
-          sliceUuidBuilder_ = null;
+          timestamp_ = null;
+          timestampBuilder_ = null;
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
+       * <code>.context.Timestamp timestamp = 10;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getSliceUuidBuilder() {
+      public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
         
         onChanged();
-        return getSliceUuidFieldBuilder().getBuilder();
+        return getTimestampFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
+       * <code>.context.Timestamp timestamp = 10;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getSliceUuidOrBuilder() {
-        if (sliceUuidBuilder_ != null) {
-          return sliceUuidBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
+        if (timestampBuilder_ != null) {
+          return timestampBuilder_.getMessageOrBuilder();
         } else {
-          return sliceUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : sliceUuid_;
+          return timestamp_ == null ?
+              context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
         }
       }
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
+       * <code>.context.Timestamp timestamp = 10;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getSliceUuidFieldBuilder() {
-        if (sliceUuidBuilder_ == null) {
-          sliceUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getSliceUuid(),
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
+          getTimestampFieldBuilder() {
+        if (timestampBuilder_ == null) {
+          timestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
+                  getTimestamp(),
                   getParentForChildren(),
                   isClean());
-          sliceUuid_ = null;
+          timestamp_ = null;
         }
-        return sliceUuidBuilder_;
+        return timestampBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -29814,245 +38925,98 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceId)
+      // @@protoc_insertion_point(builder_scope:context.Slice)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceId)
-    private static final context.ContextOuterClass.SliceId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Slice)
+    private static final context.ContextOuterClass.Slice DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Slice();
     }
 
-    public static context.ContextOuterClass.SliceId getDefaultInstance() {
+    public static context.ContextOuterClass.Slice getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SliceId>
-        PARSER = new com.google.protobuf.AbstractParser<SliceId>() {
+    private static final com.google.protobuf.Parser<Slice>
+        PARSER = new com.google.protobuf.AbstractParser<Slice>() {
       @java.lang.Override
-      public SliceId parsePartialFrom(
+      public Slice parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceId(input, extensionRegistry);
+        return new Slice(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceId> parser() {
+    public static com.google.protobuf.Parser<Slice> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceId> getParserForType() {
+    public com.google.protobuf.Parser<Slice> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceId getDefaultInstanceForType() {
+    public context.ContextOuterClass.Slice getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Slice)
+  public interface SliceOwnerOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceOwner)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.SliceId slice_id = 1;</code>
-     * @return Whether the sliceId field is set.
-     */
-    boolean hasSliceId();
-    /**
-     * <code>.context.SliceId slice_id = 1;</code>
-     * @return The sliceId.
-     */
-    context.ContextOuterClass.SliceId getSliceId();
-    /**
-     * <code>.context.SliceId slice_id = 1;</code>
-     */
-    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
-
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    java.util.List<context.ContextOuterClass.EndPointId> 
-        getSliceEndpointIdsList();
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    context.ContextOuterClass.EndPointId getSliceEndpointIds(int index);
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    int getSliceEndpointIdsCount();
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getSliceEndpointIdsOrBuilderList();
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    context.ContextOuterClass.EndPointIdOrBuilder getSliceEndpointIdsOrBuilder(
-        int index);
-
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    java.util.List<context.ContextOuterClass.Constraint> 
-        getSliceConstraintsList();
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    context.ContextOuterClass.Constraint getSliceConstraints(int index);
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    int getSliceConstraintsCount();
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
-        getSliceConstraintsOrBuilderList();
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    context.ContextOuterClass.ConstraintOrBuilder getSliceConstraintsOrBuilder(
-        int index);
-
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    java.util.List<context.ContextOuterClass.ServiceId> 
-        getSliceServiceIdsList();
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    context.ContextOuterClass.ServiceId getSliceServiceIds(int index);
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    int getSliceServiceIdsCount();
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getSliceServiceIdsOrBuilderList();
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    context.ContextOuterClass.ServiceIdOrBuilder getSliceServiceIdsOrBuilder(
-        int index);
-
-    /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-     */
-    java.util.List<context.ContextOuterClass.SliceId> 
-        getSliceSubsliceIdsList();
-    /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-     */
-    context.ContextOuterClass.SliceId getSliceSubsliceIds(int index);
-    /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-     */
-    int getSliceSubsliceIdsCount();
-    /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-        getSliceSubsliceIdsOrBuilderList();
-    /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-     */
-    context.ContextOuterClass.SliceIdOrBuilder getSliceSubsliceIdsOrBuilder(
-        int index);
-
-    /**
-     * <code>.context.SliceStatus slice_status = 6;</code>
-     * @return Whether the sliceStatus field is set.
-     */
-    boolean hasSliceStatus();
-    /**
-     * <code>.context.SliceStatus slice_status = 6;</code>
-     * @return The sliceStatus.
-     */
-    context.ContextOuterClass.SliceStatus getSliceStatus();
-    /**
-     * <code>.context.SliceStatus slice_status = 6;</code>
-     */
-    context.ContextOuterClass.SliceStatusOrBuilder getSliceStatusOrBuilder();
-
-    /**
-     * <code>.context.SliceConfig slice_config = 7;</code>
-     * @return Whether the sliceConfig field is set.
-     */
-    boolean hasSliceConfig();
-    /**
-     * <code>.context.SliceConfig slice_config = 7;</code>
-     * @return The sliceConfig.
-     */
-    context.ContextOuterClass.SliceConfig getSliceConfig();
-    /**
-     * <code>.context.SliceConfig slice_config = 7;</code>
-     */
-    context.ContextOuterClass.SliceConfigOrBuilder getSliceConfigOrBuilder();
-
-    /**
-     * <code>.context.SliceOwner slice_owner = 8;</code>
-     * @return Whether the sliceOwner field is set.
+     * <code>.context.Uuid owner_uuid = 1;</code>
+     * @return Whether the ownerUuid field is set.
      */
-    boolean hasSliceOwner();
+    boolean hasOwnerUuid();
     /**
-     * <code>.context.SliceOwner slice_owner = 8;</code>
-     * @return The sliceOwner.
+     * <code>.context.Uuid owner_uuid = 1;</code>
+     * @return The ownerUuid.
      */
-    context.ContextOuterClass.SliceOwner getSliceOwner();
+    context.ContextOuterClass.Uuid getOwnerUuid();
     /**
-     * <code>.context.SliceOwner slice_owner = 8;</code>
+     * <code>.context.Uuid owner_uuid = 1;</code>
      */
-    context.ContextOuterClass.SliceOwnerOrBuilder getSliceOwnerOrBuilder();
+    context.ContextOuterClass.UuidOrBuilder getOwnerUuidOrBuilder();
 
     /**
-     * <code>.context.Timestamp timestamp = 9;</code>
-     * @return Whether the timestamp field is set.
-     */
-    boolean hasTimestamp();
-    /**
-     * <code>.context.Timestamp timestamp = 9;</code>
-     * @return The timestamp.
+     * <code>string owner_string = 2;</code>
+     * @return The ownerString.
      */
-    context.ContextOuterClass.Timestamp getTimestamp();
+    java.lang.String getOwnerString();
     /**
-     * <code>.context.Timestamp timestamp = 9;</code>
+     * <code>string owner_string = 2;</code>
+     * @return The bytes for ownerString.
      */
-    context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder();
+    com.google.protobuf.ByteString
+        getOwnerStringBytes();
   }
   /**
-   * Protobuf type {@code context.Slice}
+   * Protobuf type {@code context.SliceOwner}
    */
-  public static final class Slice extends
+  public static final class SliceOwner extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Slice)
-      SliceOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceOwner)
+      SliceOwnerOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Slice.newBuilder() to construct.
-    private Slice(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceOwner.newBuilder() to construct.
+    private SliceOwner(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Slice() {
-      sliceEndpointIds_ = java.util.Collections.emptyList();
-      sliceConstraints_ = java.util.Collections.emptyList();
-      sliceServiceIds_ = java.util.Collections.emptyList();
-      sliceSubsliceIds_ = java.util.Collections.emptyList();
+    private SliceOwner() {
+      ownerString_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Slice();
+      return new SliceOwner();
     }
 
     @java.lang.Override
@@ -30060,7 +39024,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Slice(
+    private SliceOwner(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -30068,7 +39032,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -30080,104 +39043,22 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.SliceId.Builder subBuilder = null;
-              if (sliceId_ != null) {
-                subBuilder = sliceId_.toBuilder();
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (ownerUuid_ != null) {
+                subBuilder = ownerUuid_.toBuilder();
               }
-              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
+              ownerUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(sliceId_);
-                sliceId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(ownerUuid_);
+                ownerUuid_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                sliceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              sliceEndpointIds_.add(
-                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
-              break;
-            }
-            case 26: {
-              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                sliceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>();
-                mutable_bitField0_ |= 0x00000002;
-              }
-              sliceConstraints_.add(
-                  input.readMessage(context.ContextOuterClass.Constraint.parser(), extensionRegistry));
-              break;
-            }
-            case 34: {
-              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
-                sliceServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
-                mutable_bitField0_ |= 0x00000004;
-              }
-              sliceServiceIds_.add(
-                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
-              break;
-            }
-            case 42: {
-              if (!((mutable_bitField0_ & 0x00000008) != 0)) {
-                sliceSubsliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>();
-                mutable_bitField0_ |= 0x00000008;
-              }
-              sliceSubsliceIds_.add(
-                  input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry));
-              break;
-            }
-            case 50: {
-              context.ContextOuterClass.SliceStatus.Builder subBuilder = null;
-              if (sliceStatus_ != null) {
-                subBuilder = sliceStatus_.toBuilder();
-              }
-              sliceStatus_ = input.readMessage(context.ContextOuterClass.SliceStatus.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(sliceStatus_);
-                sliceStatus_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 58: {
-              context.ContextOuterClass.SliceConfig.Builder subBuilder = null;
-              if (sliceConfig_ != null) {
-                subBuilder = sliceConfig_.toBuilder();
-              }
-              sliceConfig_ = input.readMessage(context.ContextOuterClass.SliceConfig.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(sliceConfig_);
-                sliceConfig_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 66: {
-              context.ContextOuterClass.SliceOwner.Builder subBuilder = null;
-              if (sliceOwner_ != null) {
-                subBuilder = sliceOwner_.toBuilder();
-              }
-              sliceOwner_ = input.readMessage(context.ContextOuterClass.SliceOwner.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(sliceOwner_);
-                sliceOwner_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 74: {
-              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
-              if (timestamp_ != null) {
-                subBuilder = timestamp_.toBuilder();
-              }
-              timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(timestamp_);
-                timestamp_ = subBuilder.buildPartial();
-              }
+              java.lang.String s = input.readStringRequireUtf8();
 
+              ownerString_ = s;
               break;
             }
             default: {
@@ -30195,323 +39076,812 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          sliceEndpointIds_ = java.util.Collections.unmodifiableList(sliceEndpointIds_);
-        }
-        if (((mutable_bitField0_ & 0x00000002) != 0)) {
-          sliceConstraints_ = java.util.Collections.unmodifiableList(sliceConstraints_);
-        }
-        if (((mutable_bitField0_ & 0x00000004) != 0)) {
-          sliceServiceIds_ = java.util.Collections.unmodifiableList(sliceServiceIds_);
-        }
-        if (((mutable_bitField0_ & 0x00000008) != 0)) {
-          sliceSubsliceIds_ = java.util.Collections.unmodifiableList(sliceSubsliceIds_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Slice_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceOwner_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Slice_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceOwner_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Slice.class, context.ContextOuterClass.Slice.Builder.class);
+              context.ContextOuterClass.SliceOwner.class, context.ContextOuterClass.SliceOwner.Builder.class);
     }
 
-    public static final int SLICE_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.SliceId sliceId_;
+    public static final int OWNER_UUID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid ownerUuid_;
     /**
-     * <code>.context.SliceId slice_id = 1;</code>
-     * @return Whether the sliceId field is set.
+     * <code>.context.Uuid owner_uuid = 1;</code>
+     * @return Whether the ownerUuid field is set.
      */
     @java.lang.Override
-    public boolean hasSliceId() {
-      return sliceId_ != null;
+    public boolean hasOwnerUuid() {
+      return ownerUuid_ != null;
     }
     /**
-     * <code>.context.SliceId slice_id = 1;</code>
-     * @return The sliceId.
+     * <code>.context.Uuid owner_uuid = 1;</code>
+     * @return The ownerUuid.
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceId getSliceId() {
-      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+    public context.ContextOuterClass.Uuid getOwnerUuid() {
+      return ownerUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : ownerUuid_;
     }
     /**
-     * <code>.context.SliceId slice_id = 1;</code>
+     * <code>.context.Uuid owner_uuid = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-      return getSliceId();
+    public context.ContextOuterClass.UuidOrBuilder getOwnerUuidOrBuilder() {
+      return getOwnerUuid();
     }
 
-    public static final int SLICE_ENDPOINT_IDS_FIELD_NUMBER = 2;
-    private java.util.List<context.ContextOuterClass.EndPointId> sliceEndpointIds_;
+    public static final int OWNER_STRING_FIELD_NUMBER = 2;
+    private volatile java.lang.Object ownerString_;
     /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+     * <code>string owner_string = 2;</code>
+     * @return The ownerString.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.EndPointId> getSliceEndpointIdsList() {
-      return sliceEndpointIds_;
+    public java.lang.String getOwnerString() {
+      java.lang.Object ref = ownerString_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        ownerString_ = s;
+        return s;
+      }
     }
     /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+     * <code>string owner_string = 2;</code>
+     * @return The bytes for ownerString.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getSliceEndpointIdsOrBuilderList() {
-      return sliceEndpointIds_;
+    public com.google.protobuf.ByteString
+        getOwnerStringBytes() {
+      java.lang.Object ref = ownerString_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        ownerString_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
+
+      private java.util.List<context.ContextOuterClass.SliceId> sliceSubsliceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureSliceSubsliceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000008) != 0)) {
+          sliceSubsliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>(sliceSubsliceIds_);
+          bitField0_ |= 0x00000008;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceSubsliceIdsBuilder_;
+
     @java.lang.Override
-    public int getSliceEndpointIdsCount() {
-      return sliceEndpointIds_.size();
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (ownerUuid_ != null) {
+        output.writeMessage(1, getOwnerUuid());
+      }
+      if (!getOwnerStringBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, ownerString_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (ownerUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getOwnerUuid());
+      }
+      if (!getOwnerStringBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, ownerString_);
+      }
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 6;</code>
+       */
+      public Builder setSliceSubsliceIds(
+          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          ensureSliceSubsliceIdsIsMutable();
+          sliceSubsliceIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          sliceSubsliceIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      if (!(obj instanceof context.ContextOuterClass.SliceOwner)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.SliceOwner other = (context.ContextOuterClass.SliceOwner) obj;
+
+      if (hasOwnerUuid() != other.hasOwnerUuid()) return false;
+      if (hasOwnerUuid()) {
+        if (!getOwnerUuid()
+            .equals(other.getOwnerUuid())) return false;
+      }
+      if (!getOwnerString()
+          .equals(other.getOwnerString())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasOwnerUuid()) {
+        hash = (37 * hash) + OWNER_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getOwnerUuid().hashCode();
+      }
+      hash = (37 * hash) + OWNER_STRING_FIELD_NUMBER;
+      hash = (53 * hash) + getOwnerString().hashCode();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.SliceOwner parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.SliceOwner parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.SliceOwner parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.SliceOwner parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
     }
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointId getSliceEndpointIds(int index) {
-      return sliceEndpointIds_.get(index);
+    public static context.ContextOuterClass.SliceOwner parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
     }
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getSliceEndpointIdsOrBuilder(
-        int index) {
-      return sliceEndpointIds_.get(index);
+    public static context.ContextOuterClass.SliceOwner parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
     }
-
-    public static final int SLICE_CONSTRAINTS_FIELD_NUMBER = 3;
-    private java.util.List<context.ContextOuterClass.Constraint> sliceConstraints_;
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Constraint> getSliceConstraintsList() {
-      return sliceConstraints_;
+    public static context.ContextOuterClass.SliceOwner parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
     }
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
-        getSliceConstraintsOrBuilderList() {
-      return sliceConstraints_;
+    public static context.ContextOuterClass.SliceOwner parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    @java.lang.Override
-    public int getSliceConstraintsCount() {
-      return sliceConstraints_.size();
+    public static context.ContextOuterClass.SliceOwner parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
     }
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Constraint getSliceConstraints(int index) {
-      return sliceConstraints_.get(index);
+    public static context.ContextOuterClass.SliceOwner parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConstraintOrBuilder getSliceConstraintsOrBuilder(
-        int index) {
-      return sliceConstraints_.get(index);
+    public static context.ContextOuterClass.SliceOwner parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.SliceOwner parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
-    public static final int SLICE_SERVICE_IDS_FIELD_NUMBER = 4;
-    private java.util.List<context.ContextOuterClass.ServiceId> sliceServiceIds_;
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ServiceId> getSliceServiceIdsList() {
-      return sliceServiceIds_;
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
     }
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getSliceServiceIdsOrBuilderList() {
-      return sliceServiceIds_;
+    public static Builder newBuilder(context.ContextOuterClass.SliceOwner prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
     @java.lang.Override
-    public int getSliceServiceIdsCount() {
-      return sliceServiceIds_.size();
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
     }
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
+
     @java.lang.Override
-    public context.ContextOuterClass.ServiceId getSliceServiceIds(int index) {
-      return sliceServiceIds_.get(index);
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
     }
     /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+     * Protobuf type {@code context.SliceOwner}
      */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getSliceServiceIdsOrBuilder(
-        int index) {
-      return sliceServiceIds_.get(index);
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.SliceOwner)
+        context.ContextOuterClass.SliceOwnerOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_SliceOwner_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_SliceOwner_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.SliceOwner.class, context.ContextOuterClass.SliceOwner.Builder.class);
+      }
+      /**
+       * <code>.context.SliceStatus slice_status = 7;</code>
+       */
+      public Builder setSliceStatus(context.ContextOuterClass.SliceStatus value) {
+        if (sliceStatusBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sliceStatus_ = value;
+          onChanged();
+        } else {
+          sliceStatusBuilder_.setMessage(value);
+        }
+
+      // Construct using context.ContextOuterClass.SliceOwner.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      /**
+       * <code>.context.SliceStatus slice_status = 7;</code>
+       */
+      public Builder setSliceStatus(
+          context.ContextOuterClass.SliceStatus.Builder builderForValue) {
+        if (sliceStatusBuilder_ == null) {
+          sliceStatus_ = builderForValue.build();
+          onChanged();
+        } else {
+          sliceStatusBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceStatus slice_status = 7;</code>
+       */
+      public Builder mergeSliceStatus(context.ContextOuterClass.SliceStatus value) {
+        if (sliceStatusBuilder_ == null) {
+          if (sliceStatus_ != null) {
+            sliceStatus_ =
+              context.ContextOuterClass.SliceStatus.newBuilder(sliceStatus_).mergeFrom(value).buildPartial();
+          } else {
+            sliceStatus_ = value;
+          }
+          onChanged();
+        } else {
+          sliceStatusBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (ownerUuidBuilder_ == null) {
+          ownerUuid_ = null;
+        } else {
+          ownerUuid_ = null;
+          ownerUuidBuilder_ = null;
+        }
+        ownerString_ = "";
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_SliceOwner_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.SliceOwner getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceOwner.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.SliceOwner build() {
+        context.ContextOuterClass.SliceOwner result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.SliceOwner buildPartial() {
+        context.ContextOuterClass.SliceOwner result = new context.ContextOuterClass.SliceOwner(this);
+        if (ownerUuidBuilder_ == null) {
+          result.ownerUuid_ = ownerUuid_;
+        } else {
+          result.ownerUuid_ = ownerUuidBuilder_.build();
+        }
+        result.ownerString_ = ownerString_;
+        onBuilt();
+        return result;
+      }
+
+        return this;
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.SliceOwner) {
+          return mergeFrom((context.ContextOuterClass.SliceOwner)other);
+        } else {
+          sliceConfigBuilder_.mergeFrom(value);
+        }
+
+      public Builder mergeFrom(context.ContextOuterClass.SliceOwner other) {
+        if (other == context.ContextOuterClass.SliceOwner.getDefaultInstance()) return this;
+        if (other.hasOwnerUuid()) {
+          mergeOwnerUuid(other.getOwnerUuid());
+        }
+        if (!other.getOwnerString().isEmpty()) {
+          ownerString_ = other.ownerString_;
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 8;</code>
+       */
+      public Builder clearSliceConfig() {
+        if (sliceConfigBuilder_ == null) {
+          sliceConfig_ = null;
+          onChanged();
+        } else {
+          sliceConfig_ = null;
+          sliceConfigBuilder_ = null;
+        }
+
+        return this;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.SliceOwner parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.SliceOwner) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 8;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceConfig, context.ContextOuterClass.SliceConfig.Builder, context.ContextOuterClass.SliceConfigOrBuilder> 
+          getSliceConfigFieldBuilder() {
+        if (sliceConfigBuilder_ == null) {
+          sliceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceConfig, context.ContextOuterClass.SliceConfig.Builder, context.ContextOuterClass.SliceConfigOrBuilder>(
+                  getSliceConfig(),
+                  getParentForChildren(),
+                  isClean());
+          sliceConfig_ = null;
+        }
+        return sliceConfigBuilder_;
+      }
+
+      private context.ContextOuterClass.Uuid ownerUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> ownerUuidBuilder_;
+      /**
+       * <code>.context.Uuid owner_uuid = 1;</code>
+       * @return Whether the ownerUuid field is set.
+       */
+      public boolean hasOwnerUuid() {
+        return ownerUuidBuilder_ != null || ownerUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid owner_uuid = 1;</code>
+       * @return The ownerUuid.
+       */
+      public context.ContextOuterClass.Uuid getOwnerUuid() {
+        if (ownerUuidBuilder_ == null) {
+          return ownerUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : ownerUuid_;
+        } else {
+          return ownerUuidBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Uuid owner_uuid = 1;</code>
+       */
+      public Builder setOwnerUuid(context.ContextOuterClass.Uuid value) {
+        if (ownerUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ownerUuid_ = value;
+          onChanged();
+        } else {
+          ownerUuidBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid owner_uuid = 1;</code>
+       */
+      public Builder setOwnerUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (ownerUuidBuilder_ == null) {
+          ownerUuid_ = builderForValue.build();
+          onChanged();
+        } else {
+          ownerUuidBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid owner_uuid = 1;</code>
+       */
+      public Builder mergeOwnerUuid(context.ContextOuterClass.Uuid value) {
+        if (ownerUuidBuilder_ == null) {
+          if (ownerUuid_ != null) {
+            ownerUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(ownerUuid_).mergeFrom(value).buildPartial();
+          } else {
+            ownerUuid_ = value;
+          }
+          onChanged();
+        } else {
+          ownerUuidBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid owner_uuid = 1;</code>
+       */
+      public Builder clearOwnerUuid() {
+        if (ownerUuidBuilder_ == null) {
+          ownerUuid_ = null;
+          onChanged();
+        } else {
+          ownerUuid_ = null;
+          ownerUuidBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid owner_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getOwnerUuidBuilder() {
+        
+        onChanged();
+        return getOwnerUuidFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid owner_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getOwnerUuidOrBuilder() {
+        if (ownerUuidBuilder_ != null) {
+          return ownerUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return ownerUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : ownerUuid_;
+        }
+      }
+      /**
+       * <code>.context.Uuid owner_uuid = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getOwnerUuidFieldBuilder() {
+        if (ownerUuidBuilder_ == null) {
+          ownerUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getOwnerUuid(),
+                  getParentForChildren(),
+                  isClean());
+          ownerUuid_ = null;
+        }
+        return ownerUuidBuilder_;
+      }
+
+      private java.lang.Object ownerString_ = "";
+      /**
+       * <code>string owner_string = 2;</code>
+       * @return The ownerString.
+       */
+      public java.lang.String getOwnerString() {
+        java.lang.Object ref = ownerString_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          ownerString_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string owner_string = 2;</code>
+       * @return The bytes for ownerString.
+       */
+      public com.google.protobuf.ByteString
+          getOwnerStringBytes() {
+        java.lang.Object ref = ownerString_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          ownerString_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string owner_string = 2;</code>
+       * @param value The ownerString to set.
+       * @return This builder for chaining.
+       */
+      public Builder setOwnerString(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        ownerString_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string owner_string = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearOwnerString() {
+        
+        ownerString_ = getDefaultInstance().getOwnerString();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string owner_string = 2;</code>
+       * @param value The bytes for ownerString to set.
+       * @return This builder for chaining.
+       */
+      public Builder setOwnerStringBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        ownerString_ = value;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.SliceOwner)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.SliceOwner)
+    private static final context.ContextOuterClass.SliceOwner DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceOwner();
     }
 
-    public static final int SLICE_SUBSLICE_IDS_FIELD_NUMBER = 5;
-    private java.util.List<context.ContextOuterClass.SliceId> sliceSubsliceIds_;
-    /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.SliceId> getSliceSubsliceIdsList() {
-      return sliceSubsliceIds_;
-    }
-    /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-        getSliceSubsliceIdsOrBuilderList() {
-      return sliceSubsliceIds_;
+    public static context.ContextOuterClass.SliceOwner getDefaultInstance() {
+      return DEFAULT_INSTANCE;
     }
-    /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-     */
-    @java.lang.Override
-    public int getSliceSubsliceIdsCount() {
-      return sliceSubsliceIds_.size();
+
+    private static final com.google.protobuf.Parser<SliceOwner>
+        PARSER = new com.google.protobuf.AbstractParser<SliceOwner>() {
+      @java.lang.Override
+      public SliceOwner parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new SliceOwner(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<SliceOwner> parser() {
+      return PARSER;
     }
-    /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-     */
+
     @java.lang.Override
-    public context.ContextOuterClass.SliceId getSliceSubsliceIds(int index) {
-      return sliceSubsliceIds_.get(index);
+    public com.google.protobuf.Parser<SliceOwner> getParserForType() {
+      return PARSER;
     }
-    /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-     */
+
     @java.lang.Override
-    public context.ContextOuterClass.SliceIdOrBuilder getSliceSubsliceIdsOrBuilder(
-        int index) {
-      return sliceSubsliceIds_.get(index);
+    public context.ContextOuterClass.SliceOwner getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
     }
 
-    public static final int SLICE_STATUS_FIELD_NUMBER = 6;
-    private context.ContextOuterClass.SliceStatus sliceStatus_;
+  }
+
+  public interface SliceStatusOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceStatus)
+      com.google.protobuf.MessageOrBuilder {
+
     /**
-     * <code>.context.SliceStatus slice_status = 6;</code>
-     * @return Whether the sliceStatus field is set.
+     * <code>.context.SliceStatusEnum slice_status = 1;</code>
+     * @return The enum numeric value on the wire for sliceStatus.
      */
-    @java.lang.Override
-    public boolean hasSliceStatus() {
-      return sliceStatus_ != null;
-    }
+    int getSliceStatusValue();
     /**
-     * <code>.context.SliceStatus slice_status = 6;</code>
+     * <code>.context.SliceStatusEnum slice_status = 1;</code>
      * @return The sliceStatus.
      */
-    @java.lang.Override
-    public context.ContextOuterClass.SliceStatus getSliceStatus() {
-      return sliceStatus_ == null ? context.ContextOuterClass.SliceStatus.getDefaultInstance() : sliceStatus_;
+    context.ContextOuterClass.SliceStatusEnum getSliceStatus();
+  }
+  /**
+   * Protobuf type {@code context.SliceStatus}
+   */
+  public static final class SliceStatus extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.SliceStatus)
+      SliceStatusOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use SliceStatus.newBuilder() to construct.
+    private SliceStatus(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
     }
-    /**
-     * <code>.context.SliceStatus slice_status = 6;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.SliceStatusOrBuilder getSliceStatusOrBuilder() {
-      return getSliceStatus();
+    private SliceStatus() {
+      sliceStatus_ = 0;
     }
 
-    public static final int SLICE_CONFIG_FIELD_NUMBER = 7;
-    private context.ContextOuterClass.SliceConfig sliceConfig_;
-    /**
-     * <code>.context.SliceConfig slice_config = 7;</code>
-     * @return Whether the sliceConfig field is set.
-     */
-    @java.lang.Override
-    public boolean hasSliceConfig() {
-      return sliceConfig_ != null;
-    }
-    /**
-     * <code>.context.SliceConfig slice_config = 7;</code>
-     * @return The sliceConfig.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.SliceConfig getSliceConfig() {
-      return sliceConfig_ == null ? context.ContextOuterClass.SliceConfig.getDefaultInstance() : sliceConfig_;
-    }
-    /**
-     * <code>.context.SliceConfig slice_config = 7;</code>
-     */
     @java.lang.Override
-    public context.ContextOuterClass.SliceConfigOrBuilder getSliceConfigOrBuilder() {
-      return getSliceConfig();
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new SliceStatus();
     }
 
-    public static final int SLICE_OWNER_FIELD_NUMBER = 8;
-    private context.ContextOuterClass.SliceOwner sliceOwner_;
-    /**
-     * <code>.context.SliceOwner slice_owner = 8;</code>
-     * @return Whether the sliceOwner field is set.
-     */
     @java.lang.Override
-    public boolean hasSliceOwner() {
-      return sliceOwner_ != null;
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
     }
-    /**
-     * <code>.context.SliceOwner slice_owner = 8;</code>
-     * @return The sliceOwner.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.SliceOwner getSliceOwner() {
-      return sliceOwner_ == null ? context.ContextOuterClass.SliceOwner.getDefaultInstance() : sliceOwner_;
+    private SliceStatus(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+              int rawValue = input.readEnum();
+
+              sliceStatus_ = rawValue;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
     }
-    /**
-     * <code>.context.SliceOwner slice_owner = 8;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.SliceOwnerOrBuilder getSliceOwnerOrBuilder() {
-      return getSliceOwner();
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_SliceStatus_descriptor;
     }
 
-    public static final int TIMESTAMP_FIELD_NUMBER = 9;
-    private context.ContextOuterClass.Timestamp timestamp_;
-    /**
-     * <code>.context.Timestamp timestamp = 9;</code>
-     * @return Whether the timestamp field is set.
-     */
     @java.lang.Override
-    public boolean hasTimestamp() {
-      return timestamp_ != null;
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_SliceStatus_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.SliceStatus.class, context.ContextOuterClass.SliceStatus.Builder.class);
     }
+
+    public static final int SLICE_STATUS_FIELD_NUMBER = 1;
+    private int sliceStatus_;
     /**
-     * <code>.context.Timestamp timestamp = 9;</code>
-     * @return The timestamp.
+     * <code>.context.SliceStatusEnum slice_status = 1;</code>
+     * @return The enum numeric value on the wire for sliceStatus.
      */
-    @java.lang.Override
-    public context.ContextOuterClass.Timestamp getTimestamp() {
-      return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+    @java.lang.Override public int getSliceStatusValue() {
+      return sliceStatus_;
     }
     /**
-     * <code>.context.Timestamp timestamp = 9;</code>
+     * <code>.context.SliceStatusEnum slice_status = 1;</code>
+     * @return The sliceStatus.
      */
-    @java.lang.Override
-    public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
-      return getTimestamp();
+    @java.lang.Override public context.ContextOuterClass.SliceStatusEnum getSliceStatus() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.SliceStatusEnum result = context.ContextOuterClass.SliceStatusEnum.valueOf(sliceStatus_);
+      return result == null ? context.ContextOuterClass.SliceStatusEnum.UNRECOGNIZED : result;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -30528,32 +39898,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (sliceId_ != null) {
-        output.writeMessage(1, getSliceId());
-      }
-      for (int i = 0; i < sliceEndpointIds_.size(); i++) {
-        output.writeMessage(2, sliceEndpointIds_.get(i));
-      }
-      for (int i = 0; i < sliceConstraints_.size(); i++) {
-        output.writeMessage(3, sliceConstraints_.get(i));
-      }
-      for (int i = 0; i < sliceServiceIds_.size(); i++) {
-        output.writeMessage(4, sliceServiceIds_.get(i));
-      }
-      for (int i = 0; i < sliceSubsliceIds_.size(); i++) {
-        output.writeMessage(5, sliceSubsliceIds_.get(i));
-      }
-      if (sliceStatus_ != null) {
-        output.writeMessage(6, getSliceStatus());
-      }
-      if (sliceConfig_ != null) {
-        output.writeMessage(7, getSliceConfig());
-      }
-      if (sliceOwner_ != null) {
-        output.writeMessage(8, getSliceOwner());
-      }
-      if (timestamp_ != null) {
-        output.writeMessage(9, getTimestamp());
+      if (sliceStatus_ != context.ContextOuterClass.SliceStatusEnum.SLICESTATUS_UNDEFINED.getNumber()) {
+        output.writeEnum(1, sliceStatus_);
       }
       unknownFields.writeTo(output);
     }
@@ -30564,41 +39910,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (sliceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getSliceId());
-      }
-      for (int i = 0; i < sliceEndpointIds_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, sliceEndpointIds_.get(i));
-      }
-      for (int i = 0; i < sliceConstraints_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, sliceConstraints_.get(i));
-      }
-      for (int i = 0; i < sliceServiceIds_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, sliceServiceIds_.get(i));
-      }
-      for (int i = 0; i < sliceSubsliceIds_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, sliceSubsliceIds_.get(i));
-      }
-      if (sliceStatus_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, getSliceStatus());
-      }
-      if (sliceConfig_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(7, getSliceConfig());
-      }
-      if (sliceOwner_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(8, getSliceOwner());
-      }
-      if (timestamp_ != null) {
+      if (sliceStatus_ != context.ContextOuterClass.SliceStatusEnum.SLICESTATUS_UNDEFINED.getNumber()) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(9, getTimestamp());
+          .computeEnumSize(1, sliceStatus_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -30610,44 +39924,12 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Slice)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceStatus)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Slice other = (context.ContextOuterClass.Slice) obj;
+      context.ContextOuterClass.SliceStatus other = (context.ContextOuterClass.SliceStatus) obj;
 
-      if (hasSliceId() != other.hasSliceId()) return false;
-      if (hasSliceId()) {
-        if (!getSliceId()
-            .equals(other.getSliceId())) return false;
-      }
-      if (!getSliceEndpointIdsList()
-          .equals(other.getSliceEndpointIdsList())) return false;
-      if (!getSliceConstraintsList()
-          .equals(other.getSliceConstraintsList())) return false;
-      if (!getSliceServiceIdsList()
-          .equals(other.getSliceServiceIdsList())) return false;
-      if (!getSliceSubsliceIdsList()
-          .equals(other.getSliceSubsliceIdsList())) return false;
-      if (hasSliceStatus() != other.hasSliceStatus()) return false;
-      if (hasSliceStatus()) {
-        if (!getSliceStatus()
-            .equals(other.getSliceStatus())) return false;
-      }
-      if (hasSliceConfig() != other.hasSliceConfig()) return false;
-      if (hasSliceConfig()) {
-        if (!getSliceConfig()
-            .equals(other.getSliceConfig())) return false;
-      }
-      if (hasSliceOwner() != other.hasSliceOwner()) return false;
-      if (hasSliceOwner()) {
-        if (!getSliceOwner()
-            .equals(other.getSliceOwner())) return false;
-      }
-      if (hasTimestamp() != other.hasTimestamp()) return false;
-      if (hasTimestamp()) {
-        if (!getTimestamp()
-            .equals(other.getTimestamp())) return false;
-      }
+      if (sliceStatus_ != other.sliceStatus_) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -30659,110 +39941,76 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasSliceId()) {
-        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceId().hashCode();
-      }
-      if (getSliceEndpointIdsCount() > 0) {
-        hash = (37 * hash) + SLICE_ENDPOINT_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceEndpointIdsList().hashCode();
-      }
-      if (getSliceConstraintsCount() > 0) {
-        hash = (37 * hash) + SLICE_CONSTRAINTS_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceConstraintsList().hashCode();
-      }
-      if (getSliceServiceIdsCount() > 0) {
-        hash = (37 * hash) + SLICE_SERVICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceServiceIdsList().hashCode();
-      }
-      if (getSliceSubsliceIdsCount() > 0) {
-        hash = (37 * hash) + SLICE_SUBSLICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceSubsliceIdsList().hashCode();
-      }
-      if (hasSliceStatus()) {
-        hash = (37 * hash) + SLICE_STATUS_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceStatus().hashCode();
-      }
-      if (hasSliceConfig()) {
-        hash = (37 * hash) + SLICE_CONFIG_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceConfig().hashCode();
-      }
-      if (hasSliceOwner()) {
-        hash = (37 * hash) + SLICE_OWNER_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceOwner().hashCode();
-      }
-      if (hasTimestamp()) {
-        hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
-        hash = (53 * hash) + getTimestamp().hashCode();
-      }
+      hash = (37 * hash) + SLICE_STATUS_FIELD_NUMBER;
+      hash = (53 * hash) + sliceStatus_;
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Slice parseFrom(
+    public static context.ContextOuterClass.SliceStatus parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Slice parseFrom(
+    public static context.ContextOuterClass.SliceStatus parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Slice parseFrom(
+    public static context.ContextOuterClass.SliceStatus parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Slice parseFrom(
+    public static context.ContextOuterClass.SliceStatus parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Slice parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceStatus parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Slice parseFrom(
+    public static context.ContextOuterClass.SliceStatus parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Slice parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceStatus parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Slice parseFrom(
+    public static context.ContextOuterClass.SliceStatus parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Slice parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceStatus parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Slice parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceStatus parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Slice parseFrom(
+    public static context.ContextOuterClass.SliceStatus parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Slice parseFrom(
+    public static context.ContextOuterClass.SliceStatus parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -30775,7 +40023,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Slice prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceStatus prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -30791,26 +40039,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Slice}
+     * Protobuf type {@code context.SliceStatus}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Slice)
-        context.ContextOuterClass.SliceOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceStatus)
+        context.ContextOuterClass.SliceStatusOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Slice_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceStatus_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Slice_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceStatus_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Slice.class, context.ContextOuterClass.Slice.Builder.class);
+                context.ContextOuterClass.SliceStatus.class, context.ContextOuterClass.SliceStatus.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Slice.newBuilder()
+      // Construct using context.ContextOuterClass.SliceStatus.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -30823,157 +40071,40 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getSliceEndpointIdsFieldBuilder();
-          getSliceConstraintsFieldBuilder();
-          getSliceServiceIdsFieldBuilder();
-          getSliceSubsliceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
-        } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
-        }
-        if (sliceEndpointIdsBuilder_ == null) {
-          sliceEndpointIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          sliceEndpointIdsBuilder_.clear();
-        }
-        if (sliceConstraintsBuilder_ == null) {
-          sliceConstraints_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
-        } else {
-          sliceConstraintsBuilder_.clear();
-        }
-        if (sliceServiceIdsBuilder_ == null) {
-          sliceServiceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000004);
-        } else {
-          sliceServiceIdsBuilder_.clear();
-        }
-        if (sliceSubsliceIdsBuilder_ == null) {
-          sliceSubsliceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000008);
-        } else {
-          sliceSubsliceIdsBuilder_.clear();
-        }
-        if (sliceStatusBuilder_ == null) {
-          sliceStatus_ = null;
-        } else {
-          sliceStatus_ = null;
-          sliceStatusBuilder_ = null;
-        }
-        if (sliceConfigBuilder_ == null) {
-          sliceConfig_ = null;
-        } else {
-          sliceConfig_ = null;
-          sliceConfigBuilder_ = null;
-        }
-        if (sliceOwnerBuilder_ == null) {
-          sliceOwner_ = null;
-        } else {
-          sliceOwner_ = null;
-          sliceOwnerBuilder_ = null;
-        }
-        if (timestampBuilder_ == null) {
-          timestamp_ = null;
-        } else {
-          timestamp_ = null;
-          timestampBuilder_ = null;
-        }
+        sliceStatus_ = 0;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Slice_descriptor;
-      }
-
-      @java.lang.Override
-      public context.ContextOuterClass.Slice getDefaultInstanceForType() {
-        return context.ContextOuterClass.Slice.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public context.ContextOuterClass.Slice build() {
-        context.ContextOuterClass.Slice result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
+        return context.ContextOuterClass.internal_static_context_SliceStatus_descriptor;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.Slice buildPartial() {
-        context.ContextOuterClass.Slice result = new context.ContextOuterClass.Slice(this);
-        int from_bitField0_ = bitField0_;
-        if (sliceIdBuilder_ == null) {
-          result.sliceId_ = sliceId_;
-        } else {
-          result.sliceId_ = sliceIdBuilder_.build();
-        }
-        if (sliceEndpointIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            sliceEndpointIds_ = java.util.Collections.unmodifiableList(sliceEndpointIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.sliceEndpointIds_ = sliceEndpointIds_;
-        } else {
-          result.sliceEndpointIds_ = sliceEndpointIdsBuilder_.build();
-        }
-        if (sliceConstraintsBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) != 0)) {
-            sliceConstraints_ = java.util.Collections.unmodifiableList(sliceConstraints_);
-            bitField0_ = (bitField0_ & ~0x00000002);
-          }
-          result.sliceConstraints_ = sliceConstraints_;
-        } else {
-          result.sliceConstraints_ = sliceConstraintsBuilder_.build();
-        }
-        if (sliceServiceIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000004) != 0)) {
-            sliceServiceIds_ = java.util.Collections.unmodifiableList(sliceServiceIds_);
-            bitField0_ = (bitField0_ & ~0x00000004);
-          }
-          result.sliceServiceIds_ = sliceServiceIds_;
-        } else {
-          result.sliceServiceIds_ = sliceServiceIdsBuilder_.build();
-        }
-        if (sliceSubsliceIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000008) != 0)) {
-            sliceSubsliceIds_ = java.util.Collections.unmodifiableList(sliceSubsliceIds_);
-            bitField0_ = (bitField0_ & ~0x00000008);
-          }
-          result.sliceSubsliceIds_ = sliceSubsliceIds_;
-        } else {
-          result.sliceSubsliceIds_ = sliceSubsliceIdsBuilder_.build();
-        }
-        if (sliceStatusBuilder_ == null) {
-          result.sliceStatus_ = sliceStatus_;
-        } else {
-          result.sliceStatus_ = sliceStatusBuilder_.build();
-        }
-        if (sliceConfigBuilder_ == null) {
-          result.sliceConfig_ = sliceConfig_;
-        } else {
-          result.sliceConfig_ = sliceConfigBuilder_.build();
-        }
-        if (sliceOwnerBuilder_ == null) {
-          result.sliceOwner_ = sliceOwner_;
-        } else {
-          result.sliceOwner_ = sliceOwnerBuilder_.build();
-        }
-        if (timestampBuilder_ == null) {
-          result.timestamp_ = timestamp_;
-        } else {
-          result.timestamp_ = timestampBuilder_.build();
+
+      @java.lang.Override
+      public context.ContextOuterClass.SliceStatus getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceStatus.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.SliceStatus build() {
+        context.ContextOuterClass.SliceStatus result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.SliceStatus buildPartial() {
+        context.ContextOuterClass.SliceStatus result = new context.ContextOuterClass.SliceStatus(this);
+        result.sliceStatus_ = sliceStatus_;
         onBuilt();
         return result;
       }
@@ -31012,143 +40143,40 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Slice) {
-          return mergeFrom((context.ContextOuterClass.Slice)other);
+        if (other instanceof context.ContextOuterClass.SliceStatus) {
+          return mergeFrom((context.ContextOuterClass.SliceStatus)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Slice other) {
-        if (other == context.ContextOuterClass.Slice.getDefaultInstance()) return this;
-        if (other.hasSliceId()) {
-          mergeSliceId(other.getSliceId());
-        }
-        if (sliceEndpointIdsBuilder_ == null) {
-          if (!other.sliceEndpointIds_.isEmpty()) {
-            if (sliceEndpointIds_.isEmpty()) {
-              sliceEndpointIds_ = other.sliceEndpointIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureSliceEndpointIdsIsMutable();
-              sliceEndpointIds_.addAll(other.sliceEndpointIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.sliceEndpointIds_.isEmpty()) {
-            if (sliceEndpointIdsBuilder_.isEmpty()) {
-              sliceEndpointIdsBuilder_.dispose();
-              sliceEndpointIdsBuilder_ = null;
-              sliceEndpointIds_ = other.sliceEndpointIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              sliceEndpointIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSliceEndpointIdsFieldBuilder() : null;
-            } else {
-              sliceEndpointIdsBuilder_.addAllMessages(other.sliceEndpointIds_);
-            }
-          }
-        }
-        if (sliceConstraintsBuilder_ == null) {
-          if (!other.sliceConstraints_.isEmpty()) {
-            if (sliceConstraints_.isEmpty()) {
-              sliceConstraints_ = other.sliceConstraints_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-            } else {
-              ensureSliceConstraintsIsMutable();
-              sliceConstraints_.addAll(other.sliceConstraints_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.sliceConstraints_.isEmpty()) {
-            if (sliceConstraintsBuilder_.isEmpty()) {
-              sliceConstraintsBuilder_.dispose();
-              sliceConstraintsBuilder_ = null;
-              sliceConstraints_ = other.sliceConstraints_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-              sliceConstraintsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSliceConstraintsFieldBuilder() : null;
-            } else {
-              sliceConstraintsBuilder_.addAllMessages(other.sliceConstraints_);
-            }
-          }
-        }
-        if (sliceServiceIdsBuilder_ == null) {
-          if (!other.sliceServiceIds_.isEmpty()) {
-            if (sliceServiceIds_.isEmpty()) {
-              sliceServiceIds_ = other.sliceServiceIds_;
-              bitField0_ = (bitField0_ & ~0x00000004);
-            } else {
-              ensureSliceServiceIdsIsMutable();
-              sliceServiceIds_.addAll(other.sliceServiceIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.sliceServiceIds_.isEmpty()) {
-            if (sliceServiceIdsBuilder_.isEmpty()) {
-              sliceServiceIdsBuilder_.dispose();
-              sliceServiceIdsBuilder_ = null;
-              sliceServiceIds_ = other.sliceServiceIds_;
-              bitField0_ = (bitField0_ & ~0x00000004);
-              sliceServiceIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSliceServiceIdsFieldBuilder() : null;
-            } else {
-              sliceServiceIdsBuilder_.addAllMessages(other.sliceServiceIds_);
-            }
-          }
-        }
-        if (sliceSubsliceIdsBuilder_ == null) {
-          if (!other.sliceSubsliceIds_.isEmpty()) {
-            if (sliceSubsliceIds_.isEmpty()) {
-              sliceSubsliceIds_ = other.sliceSubsliceIds_;
-              bitField0_ = (bitField0_ & ~0x00000008);
-            } else {
-              ensureSliceSubsliceIdsIsMutable();
-              sliceSubsliceIds_.addAll(other.sliceSubsliceIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.sliceSubsliceIds_.isEmpty()) {
-            if (sliceSubsliceIdsBuilder_.isEmpty()) {
-              sliceSubsliceIdsBuilder_.dispose();
-              sliceSubsliceIdsBuilder_ = null;
-              sliceSubsliceIds_ = other.sliceSubsliceIds_;
-              bitField0_ = (bitField0_ & ~0x00000008);
-              sliceSubsliceIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSliceSubsliceIdsFieldBuilder() : null;
-            } else {
-              sliceSubsliceIdsBuilder_.addAllMessages(other.sliceSubsliceIds_);
-            }
-          }
-        }
-        if (other.hasSliceStatus()) {
-          mergeSliceStatus(other.getSliceStatus());
-        }
-        if (other.hasSliceConfig()) {
-          mergeSliceConfig(other.getSliceConfig());
-        }
-        if (other.hasSliceOwner()) {
-          mergeSliceOwner(other.getSliceOwner());
-        }
-        if (other.hasTimestamp()) {
-          mergeTimestamp(other.getTimestamp());
+      public Builder mergeFrom(context.ContextOuterClass.SliceStatus other) {
+        if (other == context.ContextOuterClass.SliceStatus.getDefaultInstance()) return this;
+        if (other.sliceStatus_ != 0) {
+          setSliceStatusValue(other.getSliceStatusValue());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
       }
 
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.SliceOwner}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.SliceOwner)
+        context.ContextOuterClass.SliceOwnerOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_SliceOwner_descriptor;
       }
 
       @java.lang.Override
@@ -31156,1574 +40184,1665 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Slice parsedMessage = null;
+        context.ContextOuterClass.SliceStatus parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Slice) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceStatus) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private context.ContextOuterClass.SliceId sliceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
-      /**
-       * <code>.context.SliceId slice_id = 1;</code>
-       * @return Whether the sliceId field is set.
-       */
-      public boolean hasSliceId() {
-        return sliceIdBuilder_ != null || sliceId_ != null;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 1;</code>
-       * @return The sliceId.
-       */
-      public context.ContextOuterClass.SliceId getSliceId() {
-        if (sliceIdBuilder_ == null) {
-          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
-        } else {
-          return sliceIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.SliceId slice_id = 1;</code>
-       */
-      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          sliceId_ = value;
-          onChanged();
-        } else {
-          sliceIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 1;</code>
-       */
-      public Builder setSliceId(
-          context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = builderForValue.build();
-          onChanged();
-        } else {
-          sliceIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 1;</code>
-       */
-      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
-          if (sliceId_ != null) {
-            sliceId_ =
-              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
-          } else {
-            sliceId_ = value;
-          }
-          onChanged();
-        } else {
-          sliceIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 1;</code>
-       */
-      public Builder clearSliceId() {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
-          onChanged();
-        } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 1;</code>
-       */
-      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
-        
-        onChanged();
-        return getSliceIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.SliceId slice_id = 1;</code>
-       */
-      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-        if (sliceIdBuilder_ != null) {
-          return sliceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return sliceId_ == null ?
-              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
-        }
-      }
-      /**
-       * <code>.context.SliceId slice_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
-          getSliceIdFieldBuilder() {
-        if (sliceIdBuilder_ == null) {
-          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
-                  getSliceId(),
-                  getParentForChildren(),
-                  isClean());
-          sliceId_ = null;
-        }
-        return sliceIdBuilder_;
-      }
-
-      private java.util.List<context.ContextOuterClass.EndPointId> sliceEndpointIds_ =
-        java.util.Collections.emptyList();
-      private void ensureSliceEndpointIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          sliceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(sliceEndpointIds_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> sliceEndpointIdsBuilder_;
-
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public java.util.List<context.ContextOuterClass.EndPointId> getSliceEndpointIdsList() {
-        if (sliceEndpointIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(sliceEndpointIds_);
-        } else {
-          return sliceEndpointIdsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public int getSliceEndpointIdsCount() {
-        if (sliceEndpointIdsBuilder_ == null) {
-          return sliceEndpointIds_.size();
-        } else {
-          return sliceEndpointIdsBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public context.ContextOuterClass.EndPointId getSliceEndpointIds(int index) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          return sliceEndpointIds_.get(index);
-        } else {
-          return sliceEndpointIdsBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public Builder setSliceEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceEndpointIdsIsMutable();
-          sliceEndpointIds_.set(index, value);
-          onChanged();
-        } else {
-          sliceEndpointIdsBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public Builder setSliceEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          ensureSliceEndpointIdsIsMutable();
-          sliceEndpointIds_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          sliceEndpointIdsBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public Builder addSliceEndpointIds(context.ContextOuterClass.EndPointId value) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceEndpointIdsIsMutable();
-          sliceEndpointIds_.add(value);
-          onChanged();
-        } else {
-          sliceEndpointIdsBuilder_.addMessage(value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public Builder addSliceEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceEndpointIdsIsMutable();
-          sliceEndpointIds_.add(index, value);
-          onChanged();
-        } else {
-          sliceEndpointIdsBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public Builder addSliceEndpointIds(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          ensureSliceEndpointIdsIsMutable();
-          sliceEndpointIds_.add(builderForValue.build());
-          onChanged();
-        } else {
-          sliceEndpointIdsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public Builder addSliceEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          ensureSliceEndpointIdsIsMutable();
-          sliceEndpointIds_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          sliceEndpointIdsBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public Builder addAllSliceEndpointIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          ensureSliceEndpointIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, sliceEndpointIds_);
-          onChanged();
-        } else {
-          sliceEndpointIdsBuilder_.addAllMessages(values);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public Builder clearSliceEndpointIds() {
-        if (sliceEndpointIdsBuilder_ == null) {
-          sliceEndpointIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          sliceEndpointIdsBuilder_.clear();
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public Builder removeSliceEndpointIds(int index) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          ensureSliceEndpointIdsIsMutable();
-          sliceEndpointIds_.remove(index);
-          onChanged();
-        } else {
-          sliceEndpointIdsBuilder_.remove(index);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder getSliceEndpointIdsBuilder(
-          int index) {
-        return getSliceEndpointIdsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public context.ContextOuterClass.EndPointIdOrBuilder getSliceEndpointIdsOrBuilder(
-          int index) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          return sliceEndpointIds_.get(index);  } else {
-          return sliceEndpointIdsBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-           getSliceEndpointIdsOrBuilderList() {
-        if (sliceEndpointIdsBuilder_ != null) {
-          return sliceEndpointIdsBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(sliceEndpointIds_);
-        }
-      }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder addSliceEndpointIdsBuilder() {
-        return getSliceEndpointIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.EndPointId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder addSliceEndpointIdsBuilder(
-          int index) {
-        return getSliceEndpointIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
-           getSliceEndpointIdsBuilderList() {
-        return getSliceEndpointIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getSliceEndpointIdsFieldBuilder() {
-        if (sliceEndpointIdsBuilder_ == null) {
-          sliceEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  sliceEndpointIds_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          sliceEndpointIds_ = null;
+          }
         }
-        return sliceEndpointIdsBuilder_;
-      }
-
-      private java.util.List<context.ContextOuterClass.Constraint> sliceConstraints_ =
-        java.util.Collections.emptyList();
-      private void ensureSliceConstraintsIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
-          sliceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>(sliceConstraints_);
-          bitField0_ |= 0x00000002;
-         }
+        return this;
       }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> sliceConstraintsBuilder_;
-
+      private int sliceStatus_ = 0;
       /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       * <code>.context.SliceStatusEnum slice_status = 1;</code>
+       * @return The enum numeric value on the wire for sliceStatus.
        */
-      public java.util.List<context.ContextOuterClass.Constraint> getSliceConstraintsList() {
-        if (sliceConstraintsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(sliceConstraints_);
-        } else {
-          return sliceConstraintsBuilder_.getMessageList();
-        }
+      @java.lang.Override public int getSliceStatusValue() {
+        return sliceStatus_;
       }
       /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       * <code>.context.SliceStatusEnum slice_status = 1;</code>
+       * @param value The enum numeric value on the wire for sliceStatus to set.
+       * @return This builder for chaining.
        */
-      public int getSliceConstraintsCount() {
-        if (sliceConstraintsBuilder_ == null) {
-          return sliceConstraints_.size();
-        } else {
-          return sliceConstraintsBuilder_.getCount();
-        }
+      public Builder setSliceStatusValue(int value) {
+        
+        sliceStatus_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       * <code>.context.SliceStatusEnum slice_status = 1;</code>
+       * @return The sliceStatus.
        */
-      public context.ContextOuterClass.Constraint getSliceConstraints(int index) {
-        if (sliceConstraintsBuilder_ == null) {
-          return sliceConstraints_.get(index);
-        } else {
-          return sliceConstraintsBuilder_.getMessage(index);
-        }
+      @java.lang.Override
+      public context.ContextOuterClass.SliceStatusEnum getSliceStatus() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.SliceStatusEnum result = context.ContextOuterClass.SliceStatusEnum.valueOf(sliceStatus_);
+        return result == null ? context.ContextOuterClass.SliceStatusEnum.UNRECOGNIZED : result;
       }
       /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       * <code>.context.SliceStatusEnum slice_status = 1;</code>
+       * @param value The sliceStatus to set.
+       * @return This builder for chaining.
        */
-      public Builder setSliceConstraints(
-          int index, context.ContextOuterClass.Constraint value) {
-        if (sliceConstraintsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceConstraintsIsMutable();
-          sliceConstraints_.set(index, value);
-          onChanged();
-        } else {
-          sliceConstraintsBuilder_.setMessage(index, value);
+      public Builder setSliceStatus(context.ContextOuterClass.SliceStatusEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
+        
+        sliceStatus_ = value.getNumber();
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       * <code>.context.SliceStatusEnum slice_status = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder setSliceConstraints(
-          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
-        if (sliceConstraintsBuilder_ == null) {
-          ensureSliceConstraintsIsMutable();
-          sliceConstraints_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          sliceConstraintsBuilder_.setMessage(index, builderForValue.build());
-        }
+      public Builder clearSliceStatus() {
+        
+        sliceStatus_ = 0;
+        onChanged();
         return this;
       }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public Builder addSliceConstraints(context.ContextOuterClass.Constraint value) {
-        if (sliceConstraintsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceConstraintsIsMutable();
-          sliceConstraints_.add(value);
-          onChanged();
-        } else {
-          sliceConstraintsBuilder_.addMessage(value);
-        }
-        return this;
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
       }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public Builder addSliceConstraints(
-          int index, context.ContextOuterClass.Constraint value) {
-        if (sliceConstraintsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.SliceStatus)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.SliceStatus)
+    private static final context.ContextOuterClass.SliceStatus DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceStatus();
+    }
+
+    public static context.ContextOuterClass.SliceStatus getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<SliceStatus>
+        PARSER = new com.google.protobuf.AbstractParser<SliceStatus>() {
+      @java.lang.Override
+      public SliceStatus parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new SliceStatus(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<SliceStatus> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<SliceStatus> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.SliceStatus getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface SliceConfigOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceConfig)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.ConfigRule> 
+        getConfigRulesList();
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    context.ContextOuterClass.ConfigRule getConfigRules(int index);
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    int getConfigRulesCount();
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList();
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.SliceConfig}
+   */
+  public static final class SliceConfig extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.SliceConfig)
+      SliceConfigOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use SliceConfig.newBuilder() to construct.
+    private SliceConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private SliceConfig() {
+      configRules_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new SliceConfig();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private SliceConfig(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              configRules_.add(
+                  input.readMessage(context.ContextOuterClass.ConfigRule.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
           }
-          ensureSliceConstraintsIsMutable();
-          sliceConstraints_.add(index, value);
-          onChanged();
-        } else {
-          sliceConstraintsBuilder_.addMessage(index, value);
         }
-        return this;
-      }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public Builder addSliceConstraints(
-          context.ContextOuterClass.Constraint.Builder builderForValue) {
-        if (sliceConstraintsBuilder_ == null) {
-          ensureSliceConstraintsIsMutable();
-          sliceConstraints_.add(builderForValue.build());
-          onChanged();
-        } else {
-          sliceConstraintsBuilder_.addMessage(builderForValue.build());
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          configRules_ = java.util.Collections.unmodifiableList(configRules_);
         }
-        return this;
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
       }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public Builder addSliceConstraints(
-          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
-        if (sliceConstraintsBuilder_ == null) {
-          ensureSliceConstraintsIsMutable();
-          sliceConstraints_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          sliceConstraintsBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_SliceConfig_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_SliceConfig_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.SliceConfig.class, context.ContextOuterClass.SliceConfig.Builder.class);
+    }
+
+    public static final int CONFIG_RULES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ConfigRule> configRules_;
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+      return configRules_;
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList() {
+      return configRules_;
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public int getConfigRulesCount() {
+      return configRules_.size();
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+      return configRules_.get(index);
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+        int index) {
+      return configRules_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < configRules_.size(); i++) {
+        output.writeMessage(1, configRules_.get(i));
       }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public Builder addAllSliceConstraints(
-          java.lang.Iterable<? extends context.ContextOuterClass.Constraint> values) {
-        if (sliceConstraintsBuilder_ == null) {
-          ensureSliceConstraintsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, sliceConstraints_);
-          onChanged();
-        } else {
-          sliceConstraintsBuilder_.addAllMessages(values);
-        }
-        return this;
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < configRules_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, configRules_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.SliceConfig)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.SliceConfig other = (context.ContextOuterClass.SliceConfig) obj;
+
+      if (!getConfigRulesList()
+          .equals(other.getConfigRulesList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getConfigRulesCount() > 0) {
+        hash = (37 * hash) + CONFIG_RULES_FIELD_NUMBER;
+        hash = (53 * hash) + getConfigRulesList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.SliceConfig parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.SliceConfig parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.SliceConfig parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.SliceConfig parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.SliceConfig parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.SliceConfig parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.SliceConfig parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.SliceConfig parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.SliceConfig parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.SliceConfig parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.SliceConfig parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.SliceConfig parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.SliceConfig prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.SliceConfig}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.SliceConfig)
+        context.ContextOuterClass.SliceConfigOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_SliceConfig_descriptor;
       }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public Builder clearSliceConstraints() {
-        if (sliceConstraintsBuilder_ == null) {
-          sliceConstraints_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
-          onChanged();
-        } else {
-          sliceConstraintsBuilder_.clear();
-        }
-        return this;
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_SliceConfig_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.SliceConfig.class, context.ContextOuterClass.SliceConfig.Builder.class);
       }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public Builder removeSliceConstraints(int index) {
-        if (sliceConstraintsBuilder_ == null) {
-          ensureSliceConstraintsIsMutable();
-          sliceConstraints_.remove(index);
-          onChanged();
-        } else {
-          sliceConstraintsBuilder_.remove(index);
-        }
-        return this;
+
+      // Construct using context.ContextOuterClass.SliceConfig.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public context.ContextOuterClass.Constraint.Builder getSliceConstraintsBuilder(
-          int index) {
-        return getSliceConstraintsFieldBuilder().getBuilder(index);
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public context.ContextOuterClass.ConstraintOrBuilder getSliceConstraintsOrBuilder(
-          int index) {
-        if (sliceConstraintsBuilder_ == null) {
-          return sliceConstraints_.get(index);  } else {
-          return sliceConstraintsBuilder_.getMessageOrBuilder(index);
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getConfigRulesFieldBuilder();
         }
       }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
-           getSliceConstraintsOrBuilderList() {
-        if (sliceConstraintsBuilder_ != null) {
-          return sliceConstraintsBuilder_.getMessageOrBuilderList();
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          return java.util.Collections.unmodifiableList(sliceConstraints_);
-        }
-      }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public context.ContextOuterClass.Constraint.Builder addSliceConstraintsBuilder() {
-        return getSliceConstraintsFieldBuilder().addBuilder(
-            context.ContextOuterClass.Constraint.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public context.ContextOuterClass.Constraint.Builder addSliceConstraintsBuilder(
-          int index) {
-        return getSliceConstraintsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Constraint.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public java.util.List<context.ContextOuterClass.Constraint.Builder> 
-           getSliceConstraintsBuilderList() {
-        return getSliceConstraintsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> 
-          getSliceConstraintsFieldBuilder() {
-        if (sliceConstraintsBuilder_ == null) {
-          sliceConstraintsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder>(
-                  sliceConstraints_,
-                  ((bitField0_ & 0x00000002) != 0),
-                  getParentForChildren(),
-                  isClean());
-          sliceConstraints_ = null;
+          configRulesBuilder_.clear();
         }
-        return sliceConstraintsBuilder_;
-      }
 
-      private java.util.List<context.ContextOuterClass.ServiceId> sliceServiceIds_ =
-        java.util.Collections.emptyList();
-      private void ensureSliceServiceIdsIsMutable() {
-        if (!((bitField0_ & 0x00000004) != 0)) {
-          sliceServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(sliceServiceIds_);
-          bitField0_ |= 0x00000004;
-         }
+        return this;
       }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> sliceServiceIdsBuilder_;
-
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public java.util.List<context.ContextOuterClass.ServiceId> getSliceServiceIdsList() {
-        if (sliceServiceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(sliceServiceIds_);
-        } else {
-          return sliceServiceIdsBuilder_.getMessageList();
-        }
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_SliceConfig_descriptor;
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public int getSliceServiceIdsCount() {
-        if (sliceServiceIdsBuilder_ == null) {
-          return sliceServiceIds_.size();
-        } else {
-          return sliceServiceIdsBuilder_.getCount();
-        }
+
+      @java.lang.Override
+      public context.ContextOuterClass.SliceConfig getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceConfig.getDefaultInstance();
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId getSliceServiceIds(int index) {
-        if (sliceServiceIdsBuilder_ == null) {
-          return sliceServiceIds_.get(index);
-        } else {
-          return sliceServiceIdsBuilder_.getMessage(index);
+
+      @java.lang.Override
+      public context.ContextOuterClass.SliceConfig build() {
+        context.ContextOuterClass.SliceConfig result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
+        return result;
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder setSliceServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (sliceServiceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+
+      @java.lang.Override
+      public context.ContextOuterClass.SliceConfig buildPartial() {
+        context.ContextOuterClass.SliceConfig result = new context.ContextOuterClass.SliceConfig(this);
+        int from_bitField0_ = bitField0_;
+        if (configRulesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            configRules_ = java.util.Collections.unmodifiableList(configRules_);
+            bitField0_ = (bitField0_ & ~0x00000001);
           }
-          ensureSliceServiceIdsIsMutable();
-          sliceServiceIds_.set(index, value);
-          onChanged();
+          result.configRules_ = configRules_;
         } else {
-          sliceServiceIdsBuilder_.setMessage(index, value);
+          result.configRules_ = configRulesBuilder_.build();
         }
-        return this;
+        onBuilt();
+        return result;
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder setSliceServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (sliceServiceIdsBuilder_ == null) {
-          ensureSliceServiceIdsIsMutable();
-          sliceServiceIds_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          sliceServiceIdsBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder addSliceServiceIds(context.ContextOuterClass.ServiceId value) {
-        if (sliceServiceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceServiceIdsIsMutable();
-          sliceServiceIds_.add(value);
-          onChanged();
-        } else {
-          sliceServiceIdsBuilder_.addMessage(value);
-        }
-        return this;
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder addSliceServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (sliceServiceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceServiceIdsIsMutable();
-          sliceServiceIds_.add(index, value);
-          onChanged();
-        } else {
-          sliceServiceIdsBuilder_.addMessage(index, value);
-        }
-        return this;
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder addSliceServiceIds(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (sliceServiceIdsBuilder_ == null) {
-          ensureSliceServiceIdsIsMutable();
-          sliceServiceIds_.add(builderForValue.build());
-          onChanged();
-        } else {
-          sliceServiceIdsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder addSliceServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (sliceServiceIdsBuilder_ == null) {
-          ensureSliceServiceIdsIsMutable();
-          sliceServiceIds_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          sliceServiceIdsBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder addAllSliceServiceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
-        if (sliceServiceIdsBuilder_ == null) {
-          ensureSliceServiceIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, sliceServiceIds_);
-          onChanged();
-        } else {
-          sliceServiceIdsBuilder_.addAllMessages(values);
-        }
-        return this;
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder clearSliceServiceIds() {
-        if (sliceServiceIdsBuilder_ == null) {
-          sliceServiceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000004);
-          onChanged();
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.SliceConfig) {
+          return mergeFrom((context.ContextOuterClass.SliceConfig)other);
         } else {
-          sliceServiceIdsBuilder_.clear();
+          super.mergeFrom(other);
+          return this;
         }
-        return this;
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder removeSliceServiceIds(int index) {
-        if (sliceServiceIdsBuilder_ == null) {
-          ensureSliceServiceIdsIsMutable();
-          sliceServiceIds_.remove(index);
-          onChanged();
+
+      public Builder mergeFrom(context.ContextOuterClass.SliceConfig other) {
+        if (other == context.ContextOuterClass.SliceConfig.getDefaultInstance()) return this;
+        if (configRulesBuilder_ == null) {
+          if (!other.configRules_.isEmpty()) {
+            if (configRules_.isEmpty()) {
+              configRules_ = other.configRules_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureConfigRulesIsMutable();
+              configRules_.addAll(other.configRules_);
+            }
+            onChanged();
+          }
         } else {
-          sliceServiceIdsBuilder_.remove(index);
+          if (!other.configRules_.isEmpty()) {
+            if (configRulesBuilder_.isEmpty()) {
+              configRulesBuilder_.dispose();
+              configRulesBuilder_ = null;
+              configRules_ = other.configRules_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              configRulesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getConfigRulesFieldBuilder() : null;
+            } else {
+              configRulesBuilder_.addAllMessages(other.configRules_);
+            }
+          }
         }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
         return this;
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder getSliceServiceIdsBuilder(
-          int index) {
-        return getSliceServiceIdsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceIdOrBuilder getSliceServiceIdsOrBuilder(
-          int index) {
-        if (sliceServiceIdsBuilder_ == null) {
-          return sliceServiceIds_.get(index);  } else {
-          return sliceServiceIdsBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-           getSliceServiceIdsOrBuilderList() {
-        if (sliceServiceIdsBuilder_ != null) {
-          return sliceServiceIdsBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(sliceServiceIds_);
-        }
-      }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder addSliceServiceIdsBuilder() {
-        return getSliceServiceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.ServiceId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder addSliceServiceIdsBuilder(
-          int index) {
-        return getSliceServiceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
-           getSliceServiceIdsBuilderList() {
-        return getSliceServiceIdsFieldBuilder().getBuilderList();
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getSliceServiceIdsFieldBuilder() {
-        if (sliceServiceIdsBuilder_ == null) {
-          sliceServiceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  sliceServiceIds_,
-                  ((bitField0_ & 0x00000004) != 0),
-                  getParentForChildren(),
-                  isClean());
-          sliceServiceIds_ = null;
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.SliceConfig parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.SliceConfig) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
-        return sliceServiceIdsBuilder_;
+        return this;
       }
+      private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.SliceId> sliceSubsliceIds_ =
+      private java.util.List<context.ContextOuterClass.ConfigRule> configRules_ =
         java.util.Collections.emptyList();
-      private void ensureSliceSubsliceIdsIsMutable() {
-        if (!((bitField0_ & 0x00000008) != 0)) {
-          sliceSubsliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>(sliceSubsliceIds_);
-          bitField0_ |= 0x00000008;
+      private void ensureConfigRulesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>(configRules_);
+          bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceSubsliceIdsBuilder_;
+          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> configRulesBuilder_;
 
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.SliceId> getSliceSubsliceIdsList() {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(sliceSubsliceIds_);
+      public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+        if (configRulesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(configRules_);
         } else {
-          return sliceSubsliceIdsBuilder_.getMessageList();
+          return configRulesBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public int getSliceSubsliceIdsCount() {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          return sliceSubsliceIds_.size();
+      public int getConfigRulesCount() {
+        if (configRulesBuilder_ == null) {
+          return configRules_.size();
         } else {
-          return sliceSubsliceIdsBuilder_.getCount();
+          return configRulesBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.SliceId getSliceSubsliceIds(int index) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          return sliceSubsliceIds_.get(index);
+      public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);
         } else {
-          return sliceSubsliceIdsBuilder_.getMessage(index);
+          return configRulesBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder setSliceSubsliceIds(
-          int index, context.ContextOuterClass.SliceId value) {
-        if (sliceSubsliceIdsBuilder_ == null) {
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSliceSubsliceIdsIsMutable();
-          sliceSubsliceIds_.set(index, value);
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, value);
           onChanged();
         } else {
-          sliceSubsliceIdsBuilder_.setMessage(index, value);
+          configRulesBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder setSliceSubsliceIds(
-          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          ensureSliceSubsliceIdsIsMutable();
-          sliceSubsliceIds_.set(index, builderForValue.build());
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, builderForValue.build());
           onChanged();
         } else {
-          sliceSubsliceIdsBuilder_.setMessage(index, builderForValue.build());
+          configRulesBuilder_.setMessage(index, builderForValue.build());
         }
-        return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addSliceSubsliceIds(context.ContextOuterClass.SliceId value) {
-        if (sliceSubsliceIdsBuilder_ == null) {
+      public Builder addConfigRules(context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSliceSubsliceIdsIsMutable();
-          sliceSubsliceIds_.add(value);
+          ensureConfigRulesIsMutable();
+          configRules_.add(value);
           onChanged();
         } else {
-          sliceSubsliceIdsBuilder_.addMessage(value);
+          configRulesBuilder_.addMessage(value);
         }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addSliceSubsliceIds(
-          int index, context.ContextOuterClass.SliceId value) {
-        if (sliceSubsliceIdsBuilder_ == null) {
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
-          }
-          ensureSliceSubsliceIdsIsMutable();
-          sliceSubsliceIds_.add(index, value);
+          }
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, value);
           onChanged();
         } else {
-          sliceSubsliceIdsBuilder_.addMessage(index, value);
+          configRulesBuilder_.addMessage(index, value);
         }
         return this;
       }
+
+      private int sliceStatus_ = 0;
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addSliceSubsliceIds(
-          context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          ensureSliceSubsliceIdsIsMutable();
-          sliceSubsliceIds_.add(builderForValue.build());
+      public Builder addConfigRules(
+          context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(builderForValue.build());
           onChanged();
         } else {
-          sliceSubsliceIdsBuilder_.addMessage(builderForValue.build());
+          configRulesBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addSliceSubsliceIds(
-          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          ensureSliceSubsliceIdsIsMutable();
-          sliceSubsliceIds_.add(index, builderForValue.build());
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, builderForValue.build());
           onChanged();
         } else {
-          sliceSubsliceIdsBuilder_.addMessage(index, builderForValue.build());
+          configRulesBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addAllSliceSubsliceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.SliceId> values) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          ensureSliceSubsliceIdsIsMutable();
+      public Builder addAllConfigRules(
+          java.lang.Iterable<? extends context.ContextOuterClass.ConfigRule> values) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, sliceSubsliceIds_);
+              values, configRules_);
           onChanged();
         } else {
-          sliceSubsliceIdsBuilder_.addAllMessages(values);
+          configRulesBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder clearSliceSubsliceIds() {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          sliceSubsliceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000008);
+      public Builder clearConfigRules() {
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          sliceSubsliceIdsBuilder_.clear();
+          configRulesBuilder_.clear();
         }
+        
+        sliceStatus_ = value.getNumber();
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder removeSliceSubsliceIds(int index) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          ensureSliceSubsliceIdsIsMutable();
-          sliceSubsliceIds_.remove(index);
+      public Builder removeConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.remove(index);
           onChanged();
         } else {
-          sliceSubsliceIdsBuilder_.remove(index);
+          configRulesBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.SliceId.Builder getSliceSubsliceIdsBuilder(
+      public context.ContextOuterClass.ConfigRule.Builder getConfigRulesBuilder(
           int index) {
-        return getSliceSubsliceIdsFieldBuilder().getBuilder(index);
+        return getConfigRulesFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.SliceIdOrBuilder getSliceSubsliceIdsOrBuilder(
+      public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
           int index) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          return sliceSubsliceIds_.get(index);  } else {
-          return sliceSubsliceIdsBuilder_.getMessageOrBuilder(index);
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);  } else {
+          return configRulesBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-           getSliceSubsliceIdsOrBuilderList() {
-        if (sliceSubsliceIdsBuilder_ != null) {
-          return sliceSubsliceIdsBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+           getConfigRulesOrBuilderList() {
+        if (configRulesBuilder_ != null) {
+          return configRulesBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(sliceSubsliceIds_);
+          return java.util.Collections.unmodifiableList(configRules_);
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.SliceId.Builder addSliceSubsliceIdsBuilder() {
-        return getSliceSubsliceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.SliceId.getDefaultInstance());
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder() {
+        return getConfigRulesFieldBuilder().addBuilder(
+            context.ContextOuterClass.ConfigRule.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.SliceId.Builder addSliceSubsliceIdsBuilder(
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder(
           int index) {
-        return getSliceSubsliceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.SliceId.getDefaultInstance());
+        return getConfigRulesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ConfigRule.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.SliceId.Builder> 
-           getSliceSubsliceIdsBuilderList() {
-        return getSliceSubsliceIdsFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.ConfigRule.Builder> 
+           getConfigRulesBuilderList() {
+        return getConfigRulesFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
-          getSliceSubsliceIdsFieldBuilder() {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          sliceSubsliceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
-                  sliceSubsliceIds_,
-                  ((bitField0_ & 0x00000008) != 0),
+          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> 
+          getConfigRulesFieldBuilder() {
+        if (configRulesBuilder_ == null) {
+          configRulesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder>(
+                  configRules_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          sliceSubsliceIds_ = null;
+          configRules_ = null;
         }
-        return sliceSubsliceIdsBuilder_;
+        return configRulesBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.SliceConfig)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.SliceConfig)
+    private static final context.ContextOuterClass.SliceConfig DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceConfig();
+    }
+
+    public static context.ContextOuterClass.SliceConfig getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<SliceConfig>
+        PARSER = new com.google.protobuf.AbstractParser<SliceConfig>() {
+      @java.lang.Override
+      public SliceConfig parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new SliceConfig(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<SliceConfig> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<SliceConfig> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.SliceConfig getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface SliceIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceIdList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.SliceId> 
+        getSliceIdsList();
+    /**
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     */
+    context.ContextOuterClass.SliceId getSliceIds(int index);
+    /**
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     */
+    int getSliceIdsCount();
+    /**
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+        getSliceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     */
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.SliceIdList}
+   */
+  public static final class SliceIdList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.SliceIdList)
+      SliceIdListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use SliceIdList.newBuilder() to construct.
+    private SliceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private SliceIdList() {
+      sliceIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new SliceIdList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private SliceIdList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              sliceIds_.add(
+                  input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_SliceIdList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.SliceIdList.class, context.ContextOuterClass.SliceIdList.Builder.class);
+    }
+
+    public static final int SLICE_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.SliceId> sliceIds_;
+    /**
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
+      return sliceIds_;
+    }
+    /**
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+        getSliceIdsOrBuilderList() {
+      return sliceIds_;
+    }
+    /**
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     */
+    @java.lang.Override
+    public int getSliceIdsCount() {
+      return sliceIds_.size();
+    }
+    /**
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceId getSliceIds(int index) {
+      return sliceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
+        int index) {
+      return sliceIds_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < sliceIds_.size(); i++) {
+        output.writeMessage(1, sliceIds_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < sliceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, sliceIds_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.SliceIdList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.SliceIdList other = (context.ContextOuterClass.SliceIdList) obj;
+
+      if (!getSliceIdsList()
+          .equals(other.getSliceIdsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getSliceIdsCount() > 0) {
+        hash = (37 * hash) + SLICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceIdsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.SliceIdList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.SliceIdList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.SliceIdList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.SliceIdList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.SliceIdList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.SliceIdList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.SliceIdList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.SliceIdList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.SliceIdList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.SliceIdList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.SliceIdList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.SliceIdList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.SliceIdList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.SliceIdList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.SliceIdList)
+        context.ContextOuterClass.SliceIdListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
       }
 
-      private context.ContextOuterClass.SliceStatus sliceStatus_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceStatus, context.ContextOuterClass.SliceStatus.Builder, context.ContextOuterClass.SliceStatusOrBuilder> sliceStatusBuilder_;
-      /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
-       * @return Whether the sliceStatus field is set.
-       */
-      public boolean hasSliceStatus() {
-        return sliceStatusBuilder_ != null || sliceStatus_ != null;
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_SliceIdList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.SliceIdList.class, context.ContextOuterClass.SliceIdList.Builder.class);
       }
-      /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
-       * @return The sliceStatus.
-       */
-      public context.ContextOuterClass.SliceStatus getSliceStatus() {
-        if (sliceStatusBuilder_ == null) {
-          return sliceStatus_ == null ? context.ContextOuterClass.SliceStatus.getDefaultInstance() : sliceStatus_;
-        } else {
-          return sliceStatusBuilder_.getMessage();
-        }
+
+      // Construct using context.ContextOuterClass.SliceIdList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
-       */
-      public Builder setSliceStatus(context.ContextOuterClass.SliceStatus value) {
-        if (sliceStatusBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          sliceStatus_ = value;
-          onChanged();
-        } else {
-          sliceStatusBuilder_.setMessage(value);
-        }
 
-        return this;
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
-       */
-      public Builder setSliceStatus(
-          context.ContextOuterClass.SliceStatus.Builder builderForValue) {
-        if (sliceStatusBuilder_ == null) {
-          sliceStatus_ = builderForValue.build();
-          onChanged();
-        } else {
-          sliceStatusBuilder_.setMessage(builderForValue.build());
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getSliceIdsFieldBuilder();
         }
-
-        return this;
       }
-      /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
-       */
-      public Builder mergeSliceStatus(context.ContextOuterClass.SliceStatus value) {
-        if (sliceStatusBuilder_ == null) {
-          if (sliceStatus_ != null) {
-            sliceStatus_ =
-              context.ContextOuterClass.SliceStatus.newBuilder(sliceStatus_).mergeFrom(value).buildPartial();
-          } else {
-            sliceStatus_ = value;
-          }
-          onChanged();
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (sliceIdsBuilder_ == null) {
+          sliceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          sliceStatusBuilder_.mergeFrom(value);
+          sliceIdsBuilder_.clear();
         }
-
         return this;
       }
-      /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
-       */
-      public Builder clearSliceStatus() {
-        if (sliceStatusBuilder_ == null) {
-          sliceStatus_ = null;
-          onChanged();
-        } else {
-          sliceStatus_ = null;
-          sliceStatusBuilder_ = null;
-        }
 
-        return this;
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
       }
-      /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
-       */
-      public context.ContextOuterClass.SliceStatus.Builder getSliceStatusBuilder() {
-        
-        onChanged();
-        return getSliceStatusFieldBuilder().getBuilder();
+
+      @java.lang.Override
+      public context.ContextOuterClass.SliceIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceIdList.getDefaultInstance();
       }
-      /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
-       */
-      public context.ContextOuterClass.SliceStatusOrBuilder getSliceStatusOrBuilder() {
-        if (sliceStatusBuilder_ != null) {
-          return sliceStatusBuilder_.getMessageOrBuilder();
-        } else {
-          return sliceStatus_ == null ?
-              context.ContextOuterClass.SliceStatus.getDefaultInstance() : sliceStatus_;
+
+      @java.lang.Override
+      public context.ContextOuterClass.SliceIdList build() {
+        context.ContextOuterClass.SliceIdList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
+        return result;
       }
-      /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceStatus, context.ContextOuterClass.SliceStatus.Builder, context.ContextOuterClass.SliceStatusOrBuilder> 
-          getSliceStatusFieldBuilder() {
-        if (sliceStatusBuilder_ == null) {
-          sliceStatusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.SliceStatus, context.ContextOuterClass.SliceStatus.Builder, context.ContextOuterClass.SliceStatusOrBuilder>(
-                  getSliceStatus(),
-                  getParentForChildren(),
-                  isClean());
-          sliceStatus_ = null;
+
+      @java.lang.Override
+      public context.ContextOuterClass.SliceIdList buildPartial() {
+        context.ContextOuterClass.SliceIdList result = new context.ContextOuterClass.SliceIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (sliceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.sliceIds_ = sliceIds_;
+        } else {
+          result.sliceIds_ = sliceIdsBuilder_.build();
         }
-        return sliceStatusBuilder_;
+        onBuilt();
+        return result;
       }
 
-      private context.ContextOuterClass.SliceConfig sliceConfig_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceConfig, context.ContextOuterClass.SliceConfig.Builder, context.ContextOuterClass.SliceConfigOrBuilder> sliceConfigBuilder_;
-      /**
-       * <code>.context.SliceConfig slice_config = 7;</code>
-       * @return Whether the sliceConfig field is set.
-       */
-      public boolean hasSliceConfig() {
-        return sliceConfigBuilder_ != null || sliceConfig_ != null;
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
       }
-      /**
-       * <code>.context.SliceConfig slice_config = 7;</code>
-       * @return The sliceConfig.
-       */
-      public context.ContextOuterClass.SliceConfig getSliceConfig() {
-        if (sliceConfigBuilder_ == null) {
-          return sliceConfig_ == null ? context.ContextOuterClass.SliceConfig.getDefaultInstance() : sliceConfig_;
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.SliceIdList) {
+          return mergeFrom((context.ContextOuterClass.SliceIdList)other);
         } else {
-          return sliceConfigBuilder_.getMessage();
+          super.mergeFrom(other);
+          return this;
         }
       }
-      /**
-       * <code>.context.SliceConfig slice_config = 7;</code>
-       */
-      public Builder setSliceConfig(context.ContextOuterClass.SliceConfig value) {
-        if (sliceConfigBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+
+      public Builder mergeFrom(context.ContextOuterClass.SliceIdList other) {
+        if (other == context.ContextOuterClass.SliceIdList.getDefaultInstance()) return this;
+        if (sliceIdsBuilder_ == null) {
+          if (!other.sliceIds_.isEmpty()) {
+            if (sliceIds_.isEmpty()) {
+              sliceIds_ = other.sliceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureSliceIdsIsMutable();
+              sliceIds_.addAll(other.sliceIds_);
+            }
+            onChanged();
           }
-          sliceConfig_ = value;
-          onChanged();
         } else {
-          sliceConfigBuilder_.setMessage(value);
+          if (!other.sliceIds_.isEmpty()) {
+            if (sliceIdsBuilder_.isEmpty()) {
+              sliceIdsBuilder_.dispose();
+              sliceIdsBuilder_ = null;
+              sliceIds_ = other.sliceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              sliceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSliceIdsFieldBuilder() : null;
+            } else {
+              sliceIdsBuilder_.addAllMessages(other.sliceIds_);
+            }
+          }
         }
-
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
         return this;
       }
-      /**
-       * <code>.context.SliceConfig slice_config = 7;</code>
-       */
-      public Builder setSliceConfig(
-          context.ContextOuterClass.SliceConfig.Builder builderForValue) {
-        if (sliceConfigBuilder_ == null) {
-          sliceConfig_ = builderForValue.build();
-          onChanged();
-        } else {
-          sliceConfigBuilder_.setMessage(builderForValue.build());
-        }
 
-        return this;
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      /**
-       * <code>.context.SliceConfig slice_config = 7;</code>
-       */
-      public Builder mergeSliceConfig(context.ContextOuterClass.SliceConfig value) {
-        if (sliceConfigBuilder_ == null) {
-          if (sliceConfig_ != null) {
-            sliceConfig_ =
-              context.ContextOuterClass.SliceConfig.newBuilder(sliceConfig_).mergeFrom(value).buildPartial();
-          } else {
-            sliceConfig_ = value;
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.SliceIdList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.SliceIdList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
-          onChanged();
-        } else {
-          sliceConfigBuilder_.mergeFrom(value);
         }
-
         return this;
       }
-      /**
-       * <code>.context.SliceConfig slice_config = 7;</code>
-       */
-      public Builder clearSliceConfig() {
-        if (sliceConfigBuilder_ == null) {
-          sliceConfig_ = null;
-          onChanged();
-        } else {
-          sliceConfig_ = null;
-          sliceConfigBuilder_ = null;
-        }
+      private int bitField0_;
 
-        return this;
-      }
-      /**
-       * <code>.context.SliceConfig slice_config = 7;</code>
-       */
-      public context.ContextOuterClass.SliceConfig.Builder getSliceConfigBuilder() {
-        
-        onChanged();
-        return getSliceConfigFieldBuilder().getBuilder();
+      private java.util.List<context.ContextOuterClass.SliceId> sliceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureSliceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>(sliceIds_);
+          bitField0_ |= 0x00000001;
+         }
       }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdsBuilder_;
+
       /**
-       * <code>.context.SliceConfig slice_config = 7;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.SliceConfigOrBuilder getSliceConfigOrBuilder() {
-        if (sliceConfigBuilder_ != null) {
-          return sliceConfigBuilder_.getMessageOrBuilder();
+      public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
+        if (sliceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(sliceIds_);
         } else {
-          return sliceConfig_ == null ?
-              context.ContextOuterClass.SliceConfig.getDefaultInstance() : sliceConfig_;
+          return sliceIdsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>.context.SliceConfig slice_config = 7;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceConfig, context.ContextOuterClass.SliceConfig.Builder, context.ContextOuterClass.SliceConfigOrBuilder> 
-          getSliceConfigFieldBuilder() {
-        if (sliceConfigBuilder_ == null) {
-          sliceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.SliceConfig, context.ContextOuterClass.SliceConfig.Builder, context.ContextOuterClass.SliceConfigOrBuilder>(
-                  getSliceConfig(),
-                  getParentForChildren(),
-                  isClean());
-          sliceConfig_ = null;
+      public int getSliceIdsCount() {
+        if (sliceIdsBuilder_ == null) {
+          return sliceIds_.size();
+        } else {
+          return sliceIdsBuilder_.getCount();
         }
-        return sliceConfigBuilder_;
-      }
-
-      private context.ContextOuterClass.SliceOwner sliceOwner_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceOwner, context.ContextOuterClass.SliceOwner.Builder, context.ContextOuterClass.SliceOwnerOrBuilder> sliceOwnerBuilder_;
-      /**
-       * <code>.context.SliceOwner slice_owner = 8;</code>
-       * @return Whether the sliceOwner field is set.
-       */
-      public boolean hasSliceOwner() {
-        return sliceOwnerBuilder_ != null || sliceOwner_ != null;
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 8;</code>
-       * @return The sliceOwner.
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.SliceOwner getSliceOwner() {
-        if (sliceOwnerBuilder_ == null) {
-          return sliceOwner_ == null ? context.ContextOuterClass.SliceOwner.getDefaultInstance() : sliceOwner_;
+      public context.ContextOuterClass.SliceId getSliceIds(int index) {
+        if (sliceIdsBuilder_ == null) {
+          return sliceIds_.get(index);
         } else {
-          return sliceOwnerBuilder_.getMessage();
+          return sliceIdsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 8;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder setSliceOwner(context.ContextOuterClass.SliceOwner value) {
-        if (sliceOwnerBuilder_ == null) {
+      public Builder setSliceIds(
+          int index, context.ContextOuterClass.SliceId value) {
+        if (sliceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          sliceOwner_ = value;
+          ensureSliceIdsIsMutable();
+          sliceIds_.set(index, value);
           onChanged();
         } else {
-          sliceOwnerBuilder_.setMessage(value);
+          sliceIdsBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 8;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder setSliceOwner(
-          context.ContextOuterClass.SliceOwner.Builder builderForValue) {
-        if (sliceOwnerBuilder_ == null) {
-          sliceOwner_ = builderForValue.build();
+      public Builder setSliceIds(
+          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          sliceOwnerBuilder_.setMessage(builderForValue.build());
+          sliceIdsBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 8;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder mergeSliceOwner(context.ContextOuterClass.SliceOwner value) {
-        if (sliceOwnerBuilder_ == null) {
-          if (sliceOwner_ != null) {
-            sliceOwner_ =
-              context.ContextOuterClass.SliceOwner.newBuilder(sliceOwner_).mergeFrom(value).buildPartial();
-          } else {
-            sliceOwner_ = value;
+      public Builder addSliceIds(context.ContextOuterClass.SliceId value) {
+        if (sliceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(value);
           onChanged();
         } else {
-          sliceOwnerBuilder_.mergeFrom(value);
+          sliceIdsBuilder_.addMessage(value);
         }
-
         return this;
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 8;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder clearSliceOwner() {
-        if (sliceOwnerBuilder_ == null) {
-          sliceOwner_ = null;
+      public Builder addSliceIds(
+          int index, context.ContextOuterClass.SliceId value) {
+        if (sliceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(index, value);
           onChanged();
         } else {
-          sliceOwner_ = null;
-          sliceOwnerBuilder_ = null;
+          sliceIdsBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 8;</code>
-       */
-      public context.ContextOuterClass.SliceOwner.Builder getSliceOwnerBuilder() {
-        
-        onChanged();
-        return getSliceOwnerFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.SliceOwner slice_owner = 8;</code>
-       */
-      public context.ContextOuterClass.SliceOwnerOrBuilder getSliceOwnerOrBuilder() {
-        if (sliceOwnerBuilder_ != null) {
-          return sliceOwnerBuilder_.getMessageOrBuilder();
-        } else {
-          return sliceOwner_ == null ?
-              context.ContextOuterClass.SliceOwner.getDefaultInstance() : sliceOwner_;
-        }
-      }
-      /**
-       * <code>.context.SliceOwner slice_owner = 8;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceOwner, context.ContextOuterClass.SliceOwner.Builder, context.ContextOuterClass.SliceOwnerOrBuilder> 
-          getSliceOwnerFieldBuilder() {
-        if (sliceOwnerBuilder_ == null) {
-          sliceOwnerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.SliceOwner, context.ContextOuterClass.SliceOwner.Builder, context.ContextOuterClass.SliceOwnerOrBuilder>(
-                  getSliceOwner(),
-                  getParentForChildren(),
-                  isClean());
-          sliceOwner_ = null;
-        }
-        return sliceOwnerBuilder_;
-      }
-
-      private context.ContextOuterClass.Timestamp timestamp_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
-      /**
-       * <code>.context.Timestamp timestamp = 9;</code>
-       * @return Whether the timestamp field is set.
-       */
-      public boolean hasTimestamp() {
-        return timestampBuilder_ != null || timestamp_ != null;
-      }
-      /**
-       * <code>.context.Timestamp timestamp = 9;</code>
-       * @return The timestamp.
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.Timestamp getTimestamp() {
-        if (timestampBuilder_ == null) {
-          return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+      public Builder addSliceIds(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(builderForValue.build());
+          onChanged();
         } else {
-          return timestampBuilder_.getMessage();
+          sliceIdsBuilder_.addMessage(builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 9;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder setTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (timestampBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          timestamp_ = value;
+      public Builder addSliceIds(
+          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(index, builderForValue.build());
           onChanged();
         } else {
-          timestampBuilder_.setMessage(value);
+          sliceIdsBuilder_.addMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 9;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder setTimestamp(
-          context.ContextOuterClass.Timestamp.Builder builderForValue) {
-        if (timestampBuilder_ == null) {
-          timestamp_ = builderForValue.build();
+      public Builder addAllSliceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.SliceId> values) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, sliceIds_);
           onChanged();
         } else {
-          timestampBuilder_.setMessage(builderForValue.build());
+          sliceIdsBuilder_.addAllMessages(values);
         }
-
         return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 9;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (timestampBuilder_ == null) {
-          if (timestamp_ != null) {
-            timestamp_ =
-              context.ContextOuterClass.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
-          } else {
-            timestamp_ = value;
-          }
+      public Builder clearSliceIds() {
+        if (sliceIdsBuilder_ == null) {
+          sliceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          timestampBuilder_.mergeFrom(value);
+          sliceIdsBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 9;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder clearTimestamp() {
-        if (timestampBuilder_ == null) {
-          timestamp_ = null;
+      public Builder removeSliceIds(int index) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.remove(index);
           onChanged();
         } else {
-          timestamp_ = null;
-          timestampBuilder_ = null;
+          sliceIdsBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 9;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
-        
-        onChanged();
-        return getTimestampFieldBuilder().getBuilder();
+      public context.ContextOuterClass.SliceId.Builder getSliceIdsBuilder(
+          int index) {
+        return getSliceIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>.context.Timestamp timestamp = 9;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
-        if (timestampBuilder_ != null) {
-          return timestampBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
+          int index) {
+        if (sliceIdsBuilder_ == null) {
+          return sliceIds_.get(index);  } else {
+          return sliceIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+           getSliceIdsOrBuilderList() {
+        if (sliceIdsBuilder_ != null) {
+          return sliceIdsBuilder_.getMessageOrBuilderList();
         } else {
-          return timestamp_ == null ?
-              context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+          return java.util.Collections.unmodifiableList(sliceIds_);
         }
       }
       /**
-       * <code>.context.Timestamp timestamp = 9;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       */
+      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder() {
+        return getSliceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.SliceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
-          getTimestampFieldBuilder() {
-        if (timestampBuilder_ == null) {
-          timestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
-                  getTimestamp(),
+      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder(
+          int index) {
+        return getSliceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.SliceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.SliceId.Builder> 
+           getSliceIdsBuilderList() {
+        return getSliceIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceIdsFieldBuilder() {
+        if (sliceIdsBuilder_ == null) {
+          sliceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  sliceIds_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          timestamp_ = null;
+          sliceIds_ = null;
         }
-        return timestampBuilder_;
+        return sliceIdsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -32738,98 +41857,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Slice)
+      // @@protoc_insertion_point(builder_scope:context.SliceIdList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Slice)
-    private static final context.ContextOuterClass.Slice DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceIdList)
+    private static final context.ContextOuterClass.SliceIdList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Slice();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceIdList();
     }
 
-    public static context.ContextOuterClass.Slice getDefaultInstance() {
+    public static context.ContextOuterClass.SliceIdList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Slice>
-        PARSER = new com.google.protobuf.AbstractParser<Slice>() {
+    private static final com.google.protobuf.Parser<SliceIdList>
+        PARSER = new com.google.protobuf.AbstractParser<SliceIdList>() {
       @java.lang.Override
-      public Slice parsePartialFrom(
+      public SliceIdList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Slice(input, extensionRegistry);
+        return new SliceIdList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Slice> parser() {
+    public static com.google.protobuf.Parser<SliceIdList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Slice> getParserForType() {
+    public com.google.protobuf.Parser<SliceIdList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Slice getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceIdList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceOwnerOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceOwner)
+  public interface SliceListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Uuid owner_uuid = 1;</code>
-     * @return Whether the ownerUuid field is set.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    boolean hasOwnerUuid();
+    java.util.List<context.ContextOuterClass.Slice> 
+        getSlicesList();
     /**
-     * <code>.context.Uuid owner_uuid = 1;</code>
-     * @return The ownerUuid.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    context.ContextOuterClass.Uuid getOwnerUuid();
+    context.ContextOuterClass.Slice getSlices(int index);
     /**
-     * <code>.context.Uuid owner_uuid = 1;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getOwnerUuidOrBuilder();
-
+    int getSlicesCount();
     /**
-     * <code>string owner_string = 2;</code>
-     * @return The ownerString.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    java.lang.String getOwnerString();
+    java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
+        getSlicesOrBuilderList();
     /**
-     * <code>string owner_string = 2;</code>
-     * @return The bytes for ownerString.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    com.google.protobuf.ByteString
-        getOwnerStringBytes();
+    context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
+        int index);
   }
   /**
-   * Protobuf type {@code context.SliceOwner}
+   * Protobuf type {@code context.SliceList}
    */
-  public static final class SliceOwner extends
+  public static final class SliceList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceOwner)
-      SliceOwnerOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceList)
+      SliceListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceOwner.newBuilder() to construct.
-    private SliceOwner(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceList.newBuilder() to construct.
+    private SliceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceOwner() {
-      ownerString_ = "";
+    private SliceList() {
+      slices_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SliceOwner();
+      return new SliceList();
     }
 
     @java.lang.Override
@@ -32837,7 +41953,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceOwner(
+    private SliceList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -32845,6 +41961,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -32856,22 +41973,12 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (ownerUuid_ != null) {
-                subBuilder = ownerUuid_.toBuilder();
-              }
-              ownerUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(ownerUuid_);
-                ownerUuid_ = subBuilder.buildPartial();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                slices_ = new java.util.ArrayList<context.ContextOuterClass.Slice>();
+                mutable_bitField0_ |= 0x00000001;
               }
-
-              break;
-            }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              ownerString_ = s;
+              slices_.add(
+                  input.readMessage(context.ContextOuterClass.Slice.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -32889,85 +41996,64 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          slices_ = java.util.Collections.unmodifiableList(slices_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_SliceOwner_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_SliceOwner_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceOwner.class, context.ContextOuterClass.SliceOwner.Builder.class);
+              context.ContextOuterClass.SliceList.class, context.ContextOuterClass.SliceList.Builder.class);
     }
 
-    public static final int OWNER_UUID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid ownerUuid_;
+    public static final int SLICES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Slice> slices_;
     /**
-     * <code>.context.Uuid owner_uuid = 1;</code>
-     * @return Whether the ownerUuid field is set.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public boolean hasOwnerUuid() {
-      return ownerUuid_ != null;
+    public java.util.List<context.ContextOuterClass.Slice> getSlicesList() {
+      return slices_;
     }
     /**
-     * <code>.context.Uuid owner_uuid = 1;</code>
-     * @return The ownerUuid.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getOwnerUuid() {
-      return ownerUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : ownerUuid_;
+    public java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
+        getSlicesOrBuilderList() {
+      return slices_;
     }
     /**
-     * <code>.context.Uuid owner_uuid = 1;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getOwnerUuidOrBuilder() {
-      return getOwnerUuid();
+    public int getSlicesCount() {
+      return slices_.size();
     }
-
-    public static final int OWNER_STRING_FIELD_NUMBER = 2;
-    private volatile java.lang.Object ownerString_;
     /**
-     * <code>string owner_string = 2;</code>
-     * @return The ownerString.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public java.lang.String getOwnerString() {
-      java.lang.Object ref = ownerString_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        ownerString_ = s;
-        return s;
-      }
+    public context.ContextOuterClass.Slice getSlices(int index) {
+      return slices_.get(index);
     }
     /**
-     * <code>string owner_string = 2;</code>
-     * @return The bytes for ownerString.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getOwnerStringBytes() {
-      java.lang.Object ref = ownerString_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        ownerString_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
+        int index) {
+      return slices_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -32984,11 +42070,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (ownerUuid_ != null) {
-        output.writeMessage(1, getOwnerUuid());
-      }
-      if (!getOwnerStringBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, ownerString_);
+      for (int i = 0; i < slices_.size(); i++) {
+        output.writeMessage(1, slices_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -32999,12 +42082,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (ownerUuid_ != null) {
+      for (int i = 0; i < slices_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getOwnerUuid());
-      }
-      if (!getOwnerStringBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, ownerString_);
+          .computeMessageSize(1, slices_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -33016,18 +42096,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceOwner)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceOwner other = (context.ContextOuterClass.SliceOwner) obj;
+      context.ContextOuterClass.SliceList other = (context.ContextOuterClass.SliceList) obj;
 
-      if (hasOwnerUuid() != other.hasOwnerUuid()) return false;
-      if (hasOwnerUuid()) {
-        if (!getOwnerUuid()
-            .equals(other.getOwnerUuid())) return false;
-      }
-      if (!getOwnerString()
-          .equals(other.getOwnerString())) return false;
+      if (!getSlicesList()
+          .equals(other.getSlicesList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -33039,80 +42114,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasOwnerUuid()) {
-        hash = (37 * hash) + OWNER_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getOwnerUuid().hashCode();
+      if (getSlicesCount() > 0) {
+        hash = (37 * hash) + SLICES_FIELD_NUMBER;
+        hash = (53 * hash) + getSlicesList().hashCode();
       }
-      hash = (37 * hash) + OWNER_STRING_FIELD_NUMBER;
-      hash = (53 * hash) + getOwnerString().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.SliceOwner parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceOwner parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceOwner parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceOwner parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceOwner parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceOwner parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceOwner parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceOwner parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceOwner parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceOwner parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceOwner parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceOwner parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -33125,7 +42198,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.SliceOwner prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -33141,26 +42214,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.SliceOwner}
+     * Protobuf type {@code context.SliceList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.SliceOwner)
-        context.ContextOuterClass.SliceOwnerOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceList)
+        context.ContextOuterClass.SliceListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_SliceOwner_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_SliceOwner_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceOwner.class, context.ContextOuterClass.SliceOwner.Builder.class);
+                context.ContextOuterClass.SliceList.class, context.ContextOuterClass.SliceList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.SliceOwner.newBuilder()
+      // Construct using context.ContextOuterClass.SliceList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -33173,36 +42246,35 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getSlicesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (ownerUuidBuilder_ == null) {
-          ownerUuid_ = null;
+        if (slicesBuilder_ == null) {
+          slices_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          ownerUuid_ = null;
-          ownerUuidBuilder_ = null;
+          slicesBuilder_.clear();
         }
-        ownerString_ = "";
-
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_SliceOwner_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceOwner getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceOwner.getDefaultInstance();
+      public context.ContextOuterClass.SliceList getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceOwner build() {
-        context.ContextOuterClass.SliceOwner result = buildPartial();
+      public context.ContextOuterClass.SliceList build() {
+        context.ContextOuterClass.SliceList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -33210,14 +42282,18 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceOwner buildPartial() {
-        context.ContextOuterClass.SliceOwner result = new context.ContextOuterClass.SliceOwner(this);
-        if (ownerUuidBuilder_ == null) {
-          result.ownerUuid_ = ownerUuid_;
+      public context.ContextOuterClass.SliceList buildPartial() {
+        context.ContextOuterClass.SliceList result = new context.ContextOuterClass.SliceList(this);
+        int from_bitField0_ = bitField0_;
+        if (slicesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            slices_ = java.util.Collections.unmodifiableList(slices_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.slices_ = slices_;
         } else {
-          result.ownerUuid_ = ownerUuidBuilder_.build();
+          result.slices_ = slicesBuilder_.build();
         }
-        result.ownerString_ = ownerString_;
         onBuilt();
         return result;
       }
@@ -33256,22 +42332,41 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.SliceOwner) {
-          return mergeFrom((context.ContextOuterClass.SliceOwner)other);
+        if (other instanceof context.ContextOuterClass.SliceList) {
+          return mergeFrom((context.ContextOuterClass.SliceList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.SliceOwner other) {
-        if (other == context.ContextOuterClass.SliceOwner.getDefaultInstance()) return this;
-        if (other.hasOwnerUuid()) {
-          mergeOwnerUuid(other.getOwnerUuid());
-        }
-        if (!other.getOwnerString().isEmpty()) {
-          ownerString_ = other.ownerString_;
-          onChanged();
+      public Builder mergeFrom(context.ContextOuterClass.SliceList other) {
+        if (other == context.ContextOuterClass.SliceList.getDefaultInstance()) return this;
+        if (slicesBuilder_ == null) {
+          if (!other.slices_.isEmpty()) {
+            if (slices_.isEmpty()) {
+              slices_ = other.slices_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureSlicesIsMutable();
+              slices_.addAll(other.slices_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.slices_.isEmpty()) {
+            if (slicesBuilder_.isEmpty()) {
+              slicesBuilder_.dispose();
+              slicesBuilder_ = null;
+              slices_ = other.slices_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              slicesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSlicesFieldBuilder() : null;
+            } else {
+              slicesBuilder_.addAllMessages(other.slices_);
+            }
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -33288,11 +42383,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.SliceOwner parsedMessage = null;
+        context.ContextOuterClass.SliceList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceOwner) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -33301,200 +42396,246 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.Slice> slices_ =
+        java.util.Collections.emptyList();
+      private void ensureSlicesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          slices_ = new java.util.ArrayList<context.ContextOuterClass.Slice>(slices_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder> slicesBuilder_;
 
-      private context.ContextOuterClass.Uuid ownerUuid_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> ownerUuidBuilder_;
       /**
-       * <code>.context.Uuid owner_uuid = 1;</code>
-       * @return Whether the ownerUuid field is set.
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public boolean hasOwnerUuid() {
-        return ownerUuidBuilder_ != null || ownerUuid_ != null;
+      public java.util.List<context.ContextOuterClass.Slice> getSlicesList() {
+        if (slicesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(slices_);
+        } else {
+          return slicesBuilder_.getMessageList();
+        }
       }
       /**
-       * <code>.context.Uuid owner_uuid = 1;</code>
-       * @return The ownerUuid.
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.Uuid getOwnerUuid() {
-        if (ownerUuidBuilder_ == null) {
-          return ownerUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : ownerUuid_;
+      public int getSlicesCount() {
+        if (slicesBuilder_ == null) {
+          return slices_.size();
         } else {
-          return ownerUuidBuilder_.getMessage();
+          return slicesBuilder_.getCount();
         }
       }
       /**
-       * <code>.context.Uuid owner_uuid = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder setOwnerUuid(context.ContextOuterClass.Uuid value) {
-        if (ownerUuidBuilder_ == null) {
+      public context.ContextOuterClass.Slice getSlices(int index) {
+        if (slicesBuilder_ == null) {
+          return slices_.get(index);
+        } else {
+          return slicesBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Slice slices = 1;</code>
+       */
+      public Builder setSlices(
+          int index, context.ContextOuterClass.Slice value) {
+        if (slicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSlicesIsMutable();
+          slices_.set(index, value);
+          onChanged();
+        } else {
+          slicesBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Slice slices = 1;</code>
+       */
+      public Builder setSlices(
+          int index, context.ContextOuterClass.Slice.Builder builderForValue) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          slices_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          slicesBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Slice slices = 1;</code>
+       */
+      public Builder addSlices(context.ContextOuterClass.Slice value) {
+        if (slicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSlicesIsMutable();
+          slices_.add(value);
+          onChanged();
+        } else {
+          slicesBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Slice slices = 1;</code>
+       */
+      public Builder addSlices(
+          int index, context.ContextOuterClass.Slice value) {
+        if (slicesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ownerUuid_ = value;
+          ensureSlicesIsMutable();
+          slices_.add(index, value);
           onChanged();
         } else {
-          ownerUuidBuilder_.setMessage(value);
+          slicesBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid owner_uuid = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder setOwnerUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (ownerUuidBuilder_ == null) {
-          ownerUuid_ = builderForValue.build();
+      public Builder addSlices(
+          context.ContextOuterClass.Slice.Builder builderForValue) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          slices_.add(builderForValue.build());
           onChanged();
         } else {
-          ownerUuidBuilder_.setMessage(builderForValue.build());
+          slicesBuilder_.addMessage(builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid owner_uuid = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder mergeOwnerUuid(context.ContextOuterClass.Uuid value) {
-        if (ownerUuidBuilder_ == null) {
-          if (ownerUuid_ != null) {
-            ownerUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(ownerUuid_).mergeFrom(value).buildPartial();
-          } else {
-            ownerUuid_ = value;
-          }
+      public Builder addSlices(
+          int index, context.ContextOuterClass.Slice.Builder builderForValue) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          slices_.add(index, builderForValue.build());
           onChanged();
         } else {
-          ownerUuidBuilder_.mergeFrom(value);
+          slicesBuilder_.addMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid owner_uuid = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder clearOwnerUuid() {
-        if (ownerUuidBuilder_ == null) {
-          ownerUuid_ = null;
+      public Builder addAllSlices(
+          java.lang.Iterable<? extends context.ContextOuterClass.Slice> values) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, slices_);
           onChanged();
         } else {
-          ownerUuid_ = null;
-          ownerUuidBuilder_ = null;
+          slicesBuilder_.addAllMessages(values);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid owner_uuid = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getOwnerUuidBuilder() {
-        
-        onChanged();
-        return getOwnerUuidFieldBuilder().getBuilder();
+      public Builder clearSlices() {
+        if (slicesBuilder_ == null) {
+          slices_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          slicesBuilder_.clear();
+        }
+        return this;
       }
       /**
-       * <code>.context.Uuid owner_uuid = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getOwnerUuidOrBuilder() {
-        if (ownerUuidBuilder_ != null) {
-          return ownerUuidBuilder_.getMessageOrBuilder();
+      public Builder removeSlices(int index) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          slices_.remove(index);
+          onChanged();
         } else {
-          return ownerUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : ownerUuid_;
+          slicesBuilder_.remove(index);
         }
+        return this;
       }
       /**
-       * <code>.context.Uuid owner_uuid = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getOwnerUuidFieldBuilder() {
-        if (ownerUuidBuilder_ == null) {
-          ownerUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getOwnerUuid(),
-                  getParentForChildren(),
-                  isClean());
-          ownerUuid_ = null;
-        }
-        return ownerUuidBuilder_;
+      public context.ContextOuterClass.Slice.Builder getSlicesBuilder(
+          int index) {
+        return getSlicesFieldBuilder().getBuilder(index);
       }
-
-      private java.lang.Object ownerString_ = "";
       /**
-       * <code>string owner_string = 2;</code>
-       * @return The ownerString.
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public java.lang.String getOwnerString() {
-        java.lang.Object ref = ownerString_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          ownerString_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
+      public context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
+          int index) {
+        if (slicesBuilder_ == null) {
+          return slices_.get(index);  } else {
+          return slicesBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>string owner_string = 2;</code>
-       * @return The bytes for ownerString.
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public com.google.protobuf.ByteString
-          getOwnerStringBytes() {
-        java.lang.Object ref = ownerString_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          ownerString_ = b;
-          return b;
+      public java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
+           getSlicesOrBuilderList() {
+        if (slicesBuilder_ != null) {
+          return slicesBuilder_.getMessageOrBuilderList();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          return java.util.Collections.unmodifiableList(slices_);
         }
       }
       /**
-       * <code>string owner_string = 2;</code>
-       * @param value The ownerString to set.
-       * @return This builder for chaining.
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder setOwnerString(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        ownerString_ = value;
-        onChanged();
-        return this;
+      public context.ContextOuterClass.Slice.Builder addSlicesBuilder() {
+        return getSlicesFieldBuilder().addBuilder(
+            context.ContextOuterClass.Slice.getDefaultInstance());
       }
       /**
-       * <code>string owner_string = 2;</code>
-       * @return This builder for chaining.
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder clearOwnerString() {
-        
-        ownerString_ = getDefaultInstance().getOwnerString();
-        onChanged();
-        return this;
+      public context.ContextOuterClass.Slice.Builder addSlicesBuilder(
+          int index) {
+        return getSlicesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Slice.getDefaultInstance());
       }
       /**
-       * <code>string owner_string = 2;</code>
-       * @param value The bytes for ownerString to set.
-       * @return This builder for chaining.
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder setOwnerStringBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        ownerString_ = value;
-        onChanged();
-        return this;
+      public java.util.List<context.ContextOuterClass.Slice.Builder> 
+           getSlicesBuilderList() {
+        return getSlicesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder> 
+          getSlicesFieldBuilder() {
+        if (slicesBuilder_ == null) {
+          slicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder>(
+                  slices_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          slices_ = null;
+        }
+        return slicesBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -33509,82 +42650,115 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceOwner)
+      // @@protoc_insertion_point(builder_scope:context.SliceList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceOwner)
-    private static final context.ContextOuterClass.SliceOwner DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceList)
+    private static final context.ContextOuterClass.SliceList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceOwner();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceList();
     }
 
-    public static context.ContextOuterClass.SliceOwner getDefaultInstance() {
+    public static context.ContextOuterClass.SliceList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SliceOwner>
-        PARSER = new com.google.protobuf.AbstractParser<SliceOwner>() {
+    private static final com.google.protobuf.Parser<SliceList>
+        PARSER = new com.google.protobuf.AbstractParser<SliceList>() {
       @java.lang.Override
-      public SliceOwner parsePartialFrom(
+      public SliceList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceOwner(input, extensionRegistry);
+        return new SliceList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceOwner> parser() {
+    public static com.google.protobuf.Parser<SliceList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceOwner> getParserForType() {
+    public com.google.protobuf.Parser<SliceList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceOwner getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceStatusOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceStatus)
+  public interface SliceFilterOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceFilter)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.SliceStatusEnum slice_status = 1;</code>
-     * @return The enum numeric value on the wire for sliceStatus.
+     * <code>.context.SliceIdList slice_ids = 1;</code>
+     * @return Whether the sliceIds field is set.
      */
-    int getSliceStatusValue();
+    boolean hasSliceIds();
     /**
-     * <code>.context.SliceStatusEnum slice_status = 1;</code>
-     * @return The sliceStatus.
+     * <code>.context.SliceIdList slice_ids = 1;</code>
+     * @return The sliceIds.
      */
-    context.ContextOuterClass.SliceStatusEnum getSliceStatus();
+    context.ContextOuterClass.SliceIdList getSliceIds();
+    /**
+     * <code>.context.SliceIdList slice_ids = 1;</code>
+     */
+    context.ContextOuterClass.SliceIdListOrBuilder getSliceIdsOrBuilder();
+
+    /**
+     * <code>bool include_endpoint_ids = 2;</code>
+     * @return The includeEndpointIds.
+     */
+    boolean getIncludeEndpointIds();
+
+    /**
+     * <code>bool include_constraints = 3;</code>
+     * @return The includeConstraints.
+     */
+    boolean getIncludeConstraints();
+
+    /**
+     * <code>bool include_service_ids = 4;</code>
+     * @return The includeServiceIds.
+     */
+    boolean getIncludeServiceIds();
+
+    /**
+     * <code>bool include_subslice_ids = 5;</code>
+     * @return The includeSubsliceIds.
+     */
+    boolean getIncludeSubsliceIds();
+
+    /**
+     * <code>bool include_config_rules = 6;</code>
+     * @return The includeConfigRules.
+     */
+    boolean getIncludeConfigRules();
   }
   /**
-   * Protobuf type {@code context.SliceStatus}
+   * Protobuf type {@code context.SliceFilter}
    */
-  public static final class SliceStatus extends
+  public static final class SliceFilter extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceStatus)
-      SliceStatusOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceFilter)
+      SliceFilterOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceStatus.newBuilder() to construct.
-    private SliceStatus(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceFilter.newBuilder() to construct.
+    private SliceFilter(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceStatus() {
-      sliceStatus_ = 0;
+    private SliceFilter() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SliceStatus();
+      return new SliceFilter();
     }
 
     @java.lang.Override
@@ -33592,7 +42766,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceStatus(
+    private SliceFilter(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -33600,6 +42774,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -33610,10 +42785,42 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 8: {
-              int rawValue = input.readEnum();
+            case 10: {
+              context.ContextOuterClass.SliceIdList.Builder subBuilder = null;
+              if (sliceIds_ != null) {
+                subBuilder = sliceIds_.toBuilder();
+              }
+              sliceIds_ = input.readMessage(context.ContextOuterClass.SliceIdList.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceIds_);
+                sliceIds_ = subBuilder.buildPartial();
+              }
 
-              sliceStatus_ = rawValue;
+              break;
+            }
+            case 16: {
+
+              includeEndpointIds_ = input.readBool();
+              break;
+            }
+            case 24: {
+
+              includeConstraints_ = input.readBool();
+              break;
+            }
+            case 32: {
+
+              includeServiceIds_ = input.readBool();
+              break;
+            }
+            case 40: {
+
+              includeSubsliceIds_ = input.readBool();
+              break;
+            }
+            case 48: {
+
+              includeConfigRules_ = input.readBool();
               break;
             }
             default: {
@@ -33631,40 +42838,105 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          slices_ = java.util.Collections.unmodifiableList(slices_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_SliceStatus_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceFilter_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_SliceStatus_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceFilter_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceStatus.class, context.ContextOuterClass.SliceStatus.Builder.class);
+              context.ContextOuterClass.SliceFilter.class, context.ContextOuterClass.SliceFilter.Builder.class);
     }
 
-    public static final int SLICE_STATUS_FIELD_NUMBER = 1;
-    private int sliceStatus_;
+    public static final int SLICE_IDS_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.SliceIdList sliceIds_;
     /**
-     * <code>.context.SliceStatusEnum slice_status = 1;</code>
-     * @return The enum numeric value on the wire for sliceStatus.
+     * <code>.context.SliceIdList slice_ids = 1;</code>
+     * @return Whether the sliceIds field is set.
      */
-    @java.lang.Override public int getSliceStatusValue() {
-      return sliceStatus_;
+    @java.lang.Override
+    public boolean hasSliceIds() {
+      return sliceIds_ != null;
     }
     /**
-     * <code>.context.SliceStatusEnum slice_status = 1;</code>
-     * @return The sliceStatus.
+     * <code>.context.SliceIdList slice_ids = 1;</code>
+     * @return The sliceIds.
      */
-    @java.lang.Override public context.ContextOuterClass.SliceStatusEnum getSliceStatus() {
-      @SuppressWarnings("deprecation")
-      context.ContextOuterClass.SliceStatusEnum result = context.ContextOuterClass.SliceStatusEnum.valueOf(sliceStatus_);
-      return result == null ? context.ContextOuterClass.SliceStatusEnum.UNRECOGNIZED : result;
+    @java.lang.Override
+    public context.ContextOuterClass.SliceIdList getSliceIds() {
+      return sliceIds_ == null ? context.ContextOuterClass.SliceIdList.getDefaultInstance() : sliceIds_;
+    }
+    /**
+     * <code>.context.SliceIdList slice_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceIdListOrBuilder getSliceIdsOrBuilder() {
+      return getSliceIds();
+    }
+
+    public static final int INCLUDE_ENDPOINT_IDS_FIELD_NUMBER = 2;
+    private boolean includeEndpointIds_;
+    /**
+     * <code>bool include_endpoint_ids = 2;</code>
+     * @return The includeEndpointIds.
+     */
+    @java.lang.Override
+    public boolean getIncludeEndpointIds() {
+      return includeEndpointIds_;
+    }
+
+    public static final int INCLUDE_CONSTRAINTS_FIELD_NUMBER = 3;
+    private boolean includeConstraints_;
+    /**
+     * <code>bool include_constraints = 3;</code>
+     * @return The includeConstraints.
+     */
+    @java.lang.Override
+    public boolean getIncludeConstraints() {
+      return includeConstraints_;
+    }
+
+    public static final int INCLUDE_SERVICE_IDS_FIELD_NUMBER = 4;
+    private boolean includeServiceIds_;
+    /**
+     * <code>bool include_service_ids = 4;</code>
+     * @return The includeServiceIds.
+     */
+    @java.lang.Override
+    public boolean getIncludeServiceIds() {
+      return includeServiceIds_;
+    }
+
+    public static final int INCLUDE_SUBSLICE_IDS_FIELD_NUMBER = 5;
+    private boolean includeSubsliceIds_;
+    /**
+     * <code>bool include_subslice_ids = 5;</code>
+     * @return The includeSubsliceIds.
+     */
+    @java.lang.Override
+    public boolean getIncludeSubsliceIds() {
+      return includeSubsliceIds_;
+    }
+
+    public static final int INCLUDE_CONFIG_RULES_FIELD_NUMBER = 6;
+    private boolean includeConfigRules_;
+    /**
+     * <code>bool include_config_rules = 6;</code>
+     * @return The includeConfigRules.
+     */
+    @java.lang.Override
+    public boolean getIncludeConfigRules() {
+      return includeConfigRules_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -33681,8 +42953,23 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (sliceStatus_ != context.ContextOuterClass.SliceStatusEnum.SLICESTATUS_UNDEFINED.getNumber()) {
-        output.writeEnum(1, sliceStatus_);
+      if (sliceIds_ != null) {
+        output.writeMessage(1, getSliceIds());
+      }
+      if (includeEndpointIds_ != false) {
+        output.writeBool(2, includeEndpointIds_);
+      }
+      if (includeConstraints_ != false) {
+        output.writeBool(3, includeConstraints_);
+      }
+      if (includeServiceIds_ != false) {
+        output.writeBool(4, includeServiceIds_);
+      }
+      if (includeSubsliceIds_ != false) {
+        output.writeBool(5, includeSubsliceIds_);
+      }
+      if (includeConfigRules_ != false) {
+        output.writeBool(6, includeConfigRules_);
       }
       unknownFields.writeTo(output);
     }
@@ -33693,9 +42980,29 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (sliceStatus_ != context.ContextOuterClass.SliceStatusEnum.SLICESTATUS_UNDEFINED.getNumber()) {
+      if (sliceIds_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(1, sliceStatus_);
+          .computeMessageSize(1, getSliceIds());
+      }
+      if (includeEndpointIds_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(2, includeEndpointIds_);
+      }
+      if (includeConstraints_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(3, includeConstraints_);
+      }
+      if (includeServiceIds_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(4, includeServiceIds_);
+      }
+      if (includeSubsliceIds_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(5, includeSubsliceIds_);
+      }
+      if (includeConfigRules_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(6, includeConfigRules_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -33707,12 +43014,26 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceStatus)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceFilter)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceStatus other = (context.ContextOuterClass.SliceStatus) obj;
-
-      if (sliceStatus_ != other.sliceStatus_) return false;
+      context.ContextOuterClass.SliceFilter other = (context.ContextOuterClass.SliceFilter) obj;
+
+      if (hasSliceIds() != other.hasSliceIds()) return false;
+      if (hasSliceIds()) {
+        if (!getSliceIds()
+            .equals(other.getSliceIds())) return false;
+      }
+      if (getIncludeEndpointIds()
+          != other.getIncludeEndpointIds()) return false;
+      if (getIncludeConstraints()
+          != other.getIncludeConstraints()) return false;
+      if (getIncludeServiceIds()
+          != other.getIncludeServiceIds()) return false;
+      if (getIncludeSubsliceIds()
+          != other.getIncludeSubsliceIds()) return false;
+      if (getIncludeConfigRules()
+          != other.getIncludeConfigRules()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -33724,76 +43045,93 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + SLICE_STATUS_FIELD_NUMBER;
-      hash = (53 * hash) + sliceStatus_;
+      if (hasSliceIds()) {
+        hash = (37 * hash) + SLICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceIds().hashCode();
+      }
+      hash = (37 * hash) + INCLUDE_ENDPOINT_IDS_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getIncludeEndpointIds());
+      hash = (37 * hash) + INCLUDE_CONSTRAINTS_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getIncludeConstraints());
+      hash = (37 * hash) + INCLUDE_SERVICE_IDS_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getIncludeServiceIds());
+      hash = (37 * hash) + INCLUDE_SUBSLICE_IDS_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getIncludeSubsliceIds());
+      hash = (37 * hash) + INCLUDE_CONFIG_RULES_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getIncludeConfigRules());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.SliceStatus parseFrom(
+    public static context.ContextOuterClass.SliceFilter parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceStatus parseFrom(
+    public static context.ContextOuterClass.SliceFilter parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceStatus parseFrom(
+    public static context.ContextOuterClass.SliceFilter parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceStatus parseFrom(
+    public static context.ContextOuterClass.SliceFilter parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceStatus parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceFilter parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceStatus parseFrom(
+    public static context.ContextOuterClass.SliceFilter parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceStatus parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceFilter parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceStatus parseFrom(
+    public static context.ContextOuterClass.SliceFilter parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceStatus parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceFilter parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceStatus parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceFilter parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceStatus parseFrom(
+    public static context.ContextOuterClass.SliceFilter parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceStatus parseFrom(
+    public static context.ContextOuterClass.SliceFilter parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -33806,7 +43144,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.SliceStatus prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceFilter prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -33822,26 +43160,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.SliceStatus}
+     * Protobuf type {@code context.SliceFilter}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.SliceStatus)
-        context.ContextOuterClass.SliceStatusOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceFilter)
+        context.ContextOuterClass.SliceFilterOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_SliceStatus_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceFilter_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_SliceStatus_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceFilter_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceStatus.class, context.ContextOuterClass.SliceStatus.Builder.class);
+                context.ContextOuterClass.SliceFilter.class, context.ContextOuterClass.SliceFilter.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.SliceStatus.newBuilder()
+      // Construct using context.ContextOuterClass.SliceFilter.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -33854,12 +43192,27 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getSlicesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        sliceStatus_ = 0;
+        if (sliceIdsBuilder_ == null) {
+          sliceIds_ = null;
+        } else {
+          sliceIds_ = null;
+          sliceIdsBuilder_ = null;
+        }
+        includeEndpointIds_ = false;
+
+        includeConstraints_ = false;
+
+        includeServiceIds_ = false;
+
+        includeSubsliceIds_ = false;
+
+        includeConfigRules_ = false;
 
         return this;
       }
@@ -33867,17 +43220,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_SliceStatus_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceFilter_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceStatus getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceStatus.getDefaultInstance();
+      public context.ContextOuterClass.SliceFilter getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceFilter.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceStatus build() {
-        context.ContextOuterClass.SliceStatus result = buildPartial();
+      public context.ContextOuterClass.SliceFilter build() {
+        context.ContextOuterClass.SliceFilter result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -33885,9 +43238,18 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceStatus buildPartial() {
-        context.ContextOuterClass.SliceStatus result = new context.ContextOuterClass.SliceStatus(this);
-        result.sliceStatus_ = sliceStatus_;
+      public context.ContextOuterClass.SliceFilter buildPartial() {
+        context.ContextOuterClass.SliceFilter result = new context.ContextOuterClass.SliceFilter(this);
+        if (sliceIdsBuilder_ == null) {
+          result.sliceIds_ = sliceIds_;
+        } else {
+          result.sliceIds_ = sliceIdsBuilder_.build();
+        }
+        result.includeEndpointIds_ = includeEndpointIds_;
+        result.includeConstraints_ = includeConstraints_;
+        result.includeServiceIds_ = includeServiceIds_;
+        result.includeSubsliceIds_ = includeSubsliceIds_;
+        result.includeConfigRules_ = includeConfigRules_;
         onBuilt();
         return result;
       }
@@ -33926,98 +43288,333 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.SliceStatus) {
-          return mergeFrom((context.ContextOuterClass.SliceStatus)other);
+        if (other instanceof context.ContextOuterClass.SliceFilter) {
+          return mergeFrom((context.ContextOuterClass.SliceFilter)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.SliceStatus other) {
-        if (other == context.ContextOuterClass.SliceStatus.getDefaultInstance()) return this;
-        if (other.sliceStatus_ != 0) {
-          setSliceStatusValue(other.getSliceStatusValue());
-        }
-        this.mergeUnknownFields(other.unknownFields);
+      public Builder mergeFrom(context.ContextOuterClass.SliceFilter other) {
+        if (other == context.ContextOuterClass.SliceFilter.getDefaultInstance()) return this;
+        if (other.hasSliceIds()) {
+          mergeSliceIds(other.getSliceIds());
+        }
+        if (other.getIncludeEndpointIds() != false) {
+          setIncludeEndpointIds(other.getIncludeEndpointIds());
+        }
+        if (other.getIncludeConstraints() != false) {
+          setIncludeConstraints(other.getIncludeConstraints());
+        }
+        if (other.getIncludeServiceIds() != false) {
+          setIncludeServiceIds(other.getIncludeServiceIds());
+        }
+        if (other.getIncludeSubsliceIds() != false) {
+          setIncludeSubsliceIds(other.getIncludeSubsliceIds());
+        }
+        if (other.getIncludeConfigRules() != false) {
+          setIncludeConfigRules(other.getIncludeConfigRules());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.SliceFilter parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.SliceFilter) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.SliceIdList sliceIds_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceIdList, context.ContextOuterClass.SliceIdList.Builder, context.ContextOuterClass.SliceIdListOrBuilder> sliceIdsBuilder_;
+      /**
+       * <code>.context.SliceIdList slice_ids = 1;</code>
+       * @return Whether the sliceIds field is set.
+       */
+      public boolean hasSliceIds() {
+        return sliceIdsBuilder_ != null || sliceIds_ != null;
+      }
+      /**
+       * <code>.context.SliceIdList slice_ids = 1;</code>
+       * @return The sliceIds.
+       */
+      public context.ContextOuterClass.SliceIdList getSliceIds() {
+        if (sliceIdsBuilder_ == null) {
+          return sliceIds_ == null ? context.ContextOuterClass.SliceIdList.getDefaultInstance() : sliceIds_;
+        } else {
+          return sliceIdsBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.SliceIdList slice_ids = 1;</code>
+       */
+      public Builder setSliceIds(context.ContextOuterClass.SliceIdList value) {
+        if (sliceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sliceIds_ = value;
+          onChanged();
+        } else {
+          sliceIdsBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceIdList slice_ids = 1;</code>
+       */
+      public Builder setSliceIds(
+          context.ContextOuterClass.SliceIdList.Builder builderForValue) {
+        if (sliceIdsBuilder_ == null) {
+          sliceIds_ = builderForValue.build();
+          onChanged();
+        } else {
+          sliceIdsBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceIdList slice_ids = 1;</code>
+       */
+      public Builder mergeSliceIds(context.ContextOuterClass.SliceIdList value) {
+        if (sliceIdsBuilder_ == null) {
+          if (sliceIds_ != null) {
+            sliceIds_ =
+              context.ContextOuterClass.SliceIdList.newBuilder(sliceIds_).mergeFrom(value).buildPartial();
+          } else {
+            sliceIds_ = value;
+          }
+          onChanged();
+        } else {
+          sliceIdsBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceIdList slice_ids = 1;</code>
+       */
+      public Builder clearSliceIds() {
+        if (sliceIdsBuilder_ == null) {
+          sliceIds_ = null;
+          onChanged();
+        } else {
+          sliceIds_ = null;
+          sliceIdsBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceIdList slice_ids = 1;</code>
+       */
+      public context.ContextOuterClass.SliceIdList.Builder getSliceIdsBuilder() {
+        
+        onChanged();
+        return getSliceIdsFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.SliceIdList slice_ids = 1;</code>
+       */
+      public context.ContextOuterClass.SliceIdListOrBuilder getSliceIdsOrBuilder() {
+        if (sliceIdsBuilder_ != null) {
+          return sliceIdsBuilder_.getMessageOrBuilder();
+        } else {
+          return sliceIds_ == null ?
+              context.ContextOuterClass.SliceIdList.getDefaultInstance() : sliceIds_;
+        }
+      }
+      /**
+       * <code>.context.SliceIdList slice_ids = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceIdList, context.ContextOuterClass.SliceIdList.Builder, context.ContextOuterClass.SliceIdListOrBuilder> 
+          getSliceIdsFieldBuilder() {
+        if (sliceIdsBuilder_ == null) {
+          sliceIdsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceIdList, context.ContextOuterClass.SliceIdList.Builder, context.ContextOuterClass.SliceIdListOrBuilder>(
+                  getSliceIds(),
+                  getParentForChildren(),
+                  isClean());
+          sliceIds_ = null;
+        }
+        return sliceIdsBuilder_;
+      }
+
+      private boolean includeEndpointIds_ ;
+      /**
+       * <code>bool include_endpoint_ids = 2;</code>
+       * @return The includeEndpointIds.
+       */
+      @java.lang.Override
+      public boolean getIncludeEndpointIds() {
+        return includeEndpointIds_;
+      }
+      /**
+       * <code>bool include_endpoint_ids = 2;</code>
+       * @param value The includeEndpointIds to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIncludeEndpointIds(boolean value) {
+        
+        includeEndpointIds_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>bool include_endpoint_ids = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIncludeEndpointIds() {
+        
+        includeEndpointIds_ = false;
         onChanged();
         return this;
       }
 
+      private boolean includeConstraints_ ;
+      /**
+       * <code>bool include_constraints = 3;</code>
+       * @return The includeConstraints.
+       */
       @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      public boolean getIncludeConstraints() {
+        return includeConstraints_;
+      }
+      /**
+       * <code>bool include_constraints = 3;</code>
+       * @param value The includeConstraints to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIncludeConstraints(boolean value) {
+        
+        includeConstraints_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>bool include_constraints = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIncludeConstraints() {
+        
+        includeConstraints_ = false;
+        onChanged();
+        return this;
       }
 
+      private boolean includeServiceIds_ ;
+      /**
+       * <code>bool include_service_ids = 4;</code>
+       * @return The includeServiceIds.
+       */
       @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.SliceStatus parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceStatus) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
+      public boolean getIncludeServiceIds() {
+        return includeServiceIds_;
+      }
+      /**
+       * <code>bool include_service_ids = 4;</code>
+       * @param value The includeServiceIds to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIncludeServiceIds(boolean value) {
+        
+        includeServiceIds_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>bool include_service_ids = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIncludeServiceIds() {
+        
+        includeServiceIds_ = false;
+        onChanged();
         return this;
       }
 
-      private int sliceStatus_ = 0;
+      private boolean includeSubsliceIds_ ;
       /**
-       * <code>.context.SliceStatusEnum slice_status = 1;</code>
-       * @return The enum numeric value on the wire for sliceStatus.
+       * <code>bool include_subslice_ids = 5;</code>
+       * @return The includeSubsliceIds.
        */
-      @java.lang.Override public int getSliceStatusValue() {
-        return sliceStatus_;
+      @java.lang.Override
+      public boolean getIncludeSubsliceIds() {
+        return includeSubsliceIds_;
       }
       /**
-       * <code>.context.SliceStatusEnum slice_status = 1;</code>
-       * @param value The enum numeric value on the wire for sliceStatus to set.
+       * <code>bool include_subslice_ids = 5;</code>
+       * @param value The includeSubsliceIds to set.
        * @return This builder for chaining.
        */
-      public Builder setSliceStatusValue(int value) {
+      public Builder setIncludeSubsliceIds(boolean value) {
         
-        sliceStatus_ = value;
+        includeSubsliceIds_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>.context.SliceStatusEnum slice_status = 1;</code>
-       * @return The sliceStatus.
+       * <code>bool include_subslice_ids = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIncludeSubsliceIds() {
+        
+        includeSubsliceIds_ = false;
+        onChanged();
+        return this;
+      }
+
+      private boolean includeConfigRules_ ;
+      /**
+       * <code>bool include_config_rules = 6;</code>
+       * @return The includeConfigRules.
        */
       @java.lang.Override
-      public context.ContextOuterClass.SliceStatusEnum getSliceStatus() {
-        @SuppressWarnings("deprecation")
-        context.ContextOuterClass.SliceStatusEnum result = context.ContextOuterClass.SliceStatusEnum.valueOf(sliceStatus_);
-        return result == null ? context.ContextOuterClass.SliceStatusEnum.UNRECOGNIZED : result;
+      public boolean getIncludeConfigRules() {
+        return includeConfigRules_;
       }
       /**
-       * <code>.context.SliceStatusEnum slice_status = 1;</code>
-       * @param value The sliceStatus to set.
+       * <code>bool include_config_rules = 6;</code>
+       * @param value The includeConfigRules to set.
        * @return This builder for chaining.
        */
-      public Builder setSliceStatus(context.ContextOuterClass.SliceStatusEnum value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
+      public Builder setIncludeConfigRules(boolean value) {
         
-        sliceStatus_ = value.getNumber();
+        includeConfigRules_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>.context.SliceStatusEnum slice_status = 1;</code>
+       * <code>bool include_config_rules = 6;</code>
        * @return This builder for chaining.
        */
-      public Builder clearSliceStatus() {
+      public Builder clearIncludeConfigRules() {
         
-        sliceStatus_ = 0;
+        includeConfigRules_ = false;
         onChanged();
         return this;
       }
@@ -34034,95 +43631,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceStatus)
+      // @@protoc_insertion_point(builder_scope:context.SliceFilter)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceStatus)
-    private static final context.ContextOuterClass.SliceStatus DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceFilter)
+    private static final context.ContextOuterClass.SliceFilter DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceStatus();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceFilter();
     }
 
-    public static context.ContextOuterClass.SliceStatus getDefaultInstance() {
+    public static context.ContextOuterClass.SliceFilter getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SliceStatus>
-        PARSER = new com.google.protobuf.AbstractParser<SliceStatus>() {
+    private static final com.google.protobuf.Parser<SliceFilter>
+        PARSER = new com.google.protobuf.AbstractParser<SliceFilter>() {
       @java.lang.Override
-      public SliceStatus parsePartialFrom(
+      public SliceFilter parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceStatus(input, extensionRegistry);
+        return new SliceFilter(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceStatus> parser() {
+    public static com.google.protobuf.Parser<SliceFilter> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceStatus> getParserForType() {
+    public com.google.protobuf.Parser<SliceFilter> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceStatus getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceFilter getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceConfigOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceConfig)
+  public interface SliceEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceEvent)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
-    java.util.List<context.ContextOuterClass.ConfigRule> 
-        getConfigRulesList();
+    boolean hasEvent();
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
-    context.ContextOuterClass.ConfigRule getConfigRules(int index);
+    context.ContextOuterClass.Event getEvent();
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.Event event = 1;</code>
      */
-    int getConfigRulesCount();
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.SliceId slice_id = 2;</code>
+     * @return Whether the sliceId field is set.
      */
-    java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
-        getConfigRulesOrBuilderList();
+    boolean hasSliceId();
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.SliceId slice_id = 2;</code>
+     * @return The sliceId.
      */
-    context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
-        int index);
+    context.ContextOuterClass.SliceId getSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 2;</code>
+     */
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
   }
   /**
-   * Protobuf type {@code context.SliceConfig}
+   * Protobuf type {@code context.SliceEvent}
    */
-  public static final class SliceConfig extends
+  public static final class SliceEvent extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceConfig)
-      SliceConfigOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceEvent)
+      SliceEventOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceConfig.newBuilder() to construct.
-    private SliceConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceEvent.newBuilder() to construct.
+    private SliceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceConfig() {
-      configRules_ = java.util.Collections.emptyList();
+    private SliceEvent() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SliceConfig();
+      return new SliceEvent();
     }
 
     @java.lang.Override
@@ -34130,7 +43732,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceConfig(
+    private SliceEvent(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -34138,7 +43740,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -34150,12 +43751,29 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>();
-                mutable_bitField0_ |= 0x00000001;
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
               }
-              configRules_.add(
-                  input.readMessage(context.ContextOuterClass.ConfigRule.parser(), extensionRegistry));
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.SliceId.Builder subBuilder = null;
+              if (sliceId_ != null) {
+                subBuilder = sliceId_.toBuilder();
+              }
+              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceId_);
+                sliceId_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -34173,64 +43791,73 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          configRules_ = java.util.Collections.unmodifiableList(configRules_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_SliceConfig_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_SliceConfig_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceEvent_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceConfig.class, context.ContextOuterClass.SliceConfig.Builder.class);
+              context.ContextOuterClass.SliceEvent.class, context.ContextOuterClass.SliceEvent.Builder.class);
     }
 
-    public static final int CONFIG_RULES_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.ConfigRule> configRules_;
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
-      return configRules_;
+    public boolean hasEvent() {
+      return event_ != null;
     }
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
-        getConfigRulesOrBuilderList() {
-      return configRules_;
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
     }
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.Event event = 1;</code>
      */
     @java.lang.Override
-    public int getConfigRulesCount() {
-      return configRules_.size();
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
     }
+
+    public static final int SLICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.SliceId sliceId_;
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.SliceId slice_id = 2;</code>
+     * @return Whether the sliceId field is set.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
-      return configRules_.get(index);
+    public boolean hasSliceId() {
+      return sliceId_ != null;
     }
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.SliceId slice_id = 2;</code>
+     * @return The sliceId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
-        int index) {
-      return configRules_.get(index);
+    public context.ContextOuterClass.SliceId getSliceId() {
+      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+    }
+    /**
+     * <code>.context.SliceId slice_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+      return getSliceId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -34247,8 +43874,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < configRules_.size(); i++) {
-        output.writeMessage(1, configRules_.get(i));
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (sliceId_ != null) {
+        output.writeMessage(2, getSliceId());
       }
       unknownFields.writeTo(output);
     }
@@ -34259,9 +43889,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < configRules_.size(); i++) {
+      if (event_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, configRules_.get(i));
+          .computeMessageSize(1, getEvent());
+      }
+      if (sliceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getSliceId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -34273,13 +43907,21 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceConfig)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceEvent)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceConfig other = (context.ContextOuterClass.SliceConfig) obj;
+      context.ContextOuterClass.SliceEvent other = (context.ContextOuterClass.SliceEvent) obj;
 
-      if (!getConfigRulesList()
-          .equals(other.getConfigRulesList())) return false;
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasSliceId() != other.hasSliceId()) return false;
+      if (hasSliceId()) {
+        if (!getSliceId()
+            .equals(other.getSliceId())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -34291,78 +43933,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getConfigRulesCount() > 0) {
-        hash = (37 * hash) + CONFIG_RULES_FIELD_NUMBER;
-        hash = (53 * hash) + getConfigRulesList().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (hasSliceId()) {
+        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceId().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.SliceConfig parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceConfig parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceConfig parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceConfig parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceConfig parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceEvent parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceConfig parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceConfig parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceEvent parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceConfig parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceConfig parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceEvent parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceConfig parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceEvent parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceConfig parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceConfig parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -34375,7 +44021,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.SliceConfig prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceEvent prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -34391,26 +44037,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.SliceConfig}
+     * Protobuf type {@code context.SliceEvent}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.SliceConfig)
-        context.ContextOuterClass.SliceConfigOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceEvent)
+        context.ContextOuterClass.SliceEventOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_SliceConfig_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_SliceConfig_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceEvent_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceConfig.class, context.ContextOuterClass.SliceConfig.Builder.class);
+                context.ContextOuterClass.SliceEvent.class, context.ContextOuterClass.SliceEvent.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.SliceConfig.newBuilder()
+      // Construct using context.ContextOuterClass.SliceEvent.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -34423,17 +44069,22 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getConfigRulesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (configRulesBuilder_ == null) {
-          configRules_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (eventBuilder_ == null) {
+          event_ = null;
         } else {
-          configRulesBuilder_.clear();
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
         }
         return this;
       }
@@ -34441,17 +44092,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_SliceConfig_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceConfig getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceConfig.getDefaultInstance();
+      public context.ContextOuterClass.SliceEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceEvent.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceConfig build() {
-        context.ContextOuterClass.SliceConfig result = buildPartial();
+      public context.ContextOuterClass.SliceEvent build() {
+        context.ContextOuterClass.SliceEvent result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -34459,17 +44110,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceConfig buildPartial() {
-        context.ContextOuterClass.SliceConfig result = new context.ContextOuterClass.SliceConfig(this);
-        int from_bitField0_ = bitField0_;
-        if (configRulesBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            configRules_ = java.util.Collections.unmodifiableList(configRules_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.configRules_ = configRules_;
+      public context.ContextOuterClass.SliceEvent buildPartial() {
+        context.ContextOuterClass.SliceEvent result = new context.ContextOuterClass.SliceEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
         } else {
-          result.configRules_ = configRulesBuilder_.build();
+          result.event_ = eventBuilder_.build();
+        }
+        if (sliceIdBuilder_ == null) {
+          result.sliceId_ = sliceId_;
+        } else {
+          result.sliceId_ = sliceIdBuilder_.build();
         }
         onBuilt();
         return result;
@@ -34509,41 +44160,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.SliceConfig) {
-          return mergeFrom((context.ContextOuterClass.SliceConfig)other);
+        if (other instanceof context.ContextOuterClass.SliceEvent) {
+          return mergeFrom((context.ContextOuterClass.SliceEvent)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.SliceConfig other) {
-        if (other == context.ContextOuterClass.SliceConfig.getDefaultInstance()) return this;
-        if (configRulesBuilder_ == null) {
-          if (!other.configRules_.isEmpty()) {
-            if (configRules_.isEmpty()) {
-              configRules_ = other.configRules_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureConfigRulesIsMutable();
-              configRules_.addAll(other.configRules_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.configRules_.isEmpty()) {
-            if (configRulesBuilder_.isEmpty()) {
-              configRulesBuilder_.dispose();
-              configRulesBuilder_ = null;
-              configRules_ = other.configRules_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              configRulesBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getConfigRulesFieldBuilder() : null;
-            } else {
-              configRulesBuilder_.addAllMessages(other.configRules_);
-            }
-          }
+      public Builder mergeFrom(context.ContextOuterClass.SliceEvent other) {
+        if (other == context.ContextOuterClass.SliceEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (other.hasSliceId()) {
+          mergeSliceId(other.getSliceId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -34560,11 +44191,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.SliceConfig parsedMessage = null;
+        context.ContextOuterClass.SliceEvent parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceConfig) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceEvent) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -34573,246 +44204,247 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.ConfigRule> configRules_ =
-        java.util.Collections.emptyList();
-      private void ensureConfigRulesIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>(configRules_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> configRulesBuilder_;
 
+      private context.ContextOuterClass.Event event_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
-        if (configRulesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(configRules_);
-        } else {
-          return configRulesBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
-       */
-      public int getConfigRulesCount() {
-        if (configRulesBuilder_ == null) {
-          return configRules_.size();
-        } else {
-          return configRulesBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
-       */
-      public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
-        if (configRulesBuilder_ == null) {
-          return configRules_.get(index);
-        } else {
-          return configRulesBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
        */
-      public Builder setConfigRules(
-          int index, context.ContextOuterClass.ConfigRule value) {
-        if (configRulesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConfigRulesIsMutable();
-          configRules_.set(index, value);
-          onChanged();
-        } else {
-          configRulesBuilder_.setMessage(index, value);
-        }
-        return this;
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
        */
-      public Builder setConfigRules(
-          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.set(index, builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         } else {
-          configRulesBuilder_.setMessage(index, builderForValue.build());
+          return eventBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addConfigRules(context.ContextOuterClass.ConfigRule value) {
-        if (configRulesBuilder_ == null) {
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureConfigRulesIsMutable();
-          configRules_.add(value);
+          event_ = value;
           onChanged();
         } else {
-          configRulesBuilder_.addMessage(value);
+          eventBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addConfigRules(
-          int index, context.ContextOuterClass.ConfigRule value) {
-        if (configRulesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConfigRulesIsMutable();
-          configRules_.add(index, value);
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
           onChanged();
         } else {
-          configRulesBuilder_.addMessage(index, value);
+          eventBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addConfigRules(
-          context.ContextOuterClass.ConfigRule.Builder builderForValue) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.add(builderForValue.build());
+      public Builder mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+          } else {
+            event_ = value;
+          }
           onChanged();
         } else {
-          configRulesBuilder_.addMessage(builderForValue.build());
+          eventBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addConfigRules(
-          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.add(index, builderForValue.build());
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
           onChanged();
         } else {
-          configRulesBuilder_.addMessage(index, builderForValue.build());
+          event_ = null;
+          eventBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addAllConfigRules(
-          java.lang.Iterable<? extends context.ContextOuterClass.ConfigRule> values) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, configRules_);
-          onChanged();
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+        
+        onChanged();
+        return getEventFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
         } else {
-          configRulesBuilder_.addAllMessages(values);
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder clearConfigRules() {
-        if (configRulesBuilder_ == null) {
-          configRules_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
+          getEventFieldBuilder() {
+        if (eventBuilder_ == null) {
+          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
+                  getEvent(),
+                  getParentForChildren(),
+                  isClean());
+          event_ = null;
+        }
+        return eventBuilder_;
+      }
+
+      private context.ContextOuterClass.SliceId sliceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       * @return Whether the sliceId field is set.
+       */
+      public boolean hasSliceId() {
+        return sliceIdBuilder_ != null || sliceId_ != null;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       * @return The sliceId.
+       */
+      public context.ContextOuterClass.SliceId getSliceId() {
+        if (sliceIdBuilder_ == null) {
+          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
         } else {
-          configRulesBuilder_.clear();
+          return sliceIdBuilder_.getMessage();
         }
-        return this;
       }
+
+      private context.ContextOuterClass.SliceId sliceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.SliceId slice_id = 2;</code>
        */
-      public Builder removeConfigRules(int index) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.remove(index);
+      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sliceId_ = value;
           onChanged();
         } else {
-          configRulesBuilder_.remove(index);
+          sliceIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.SliceId slice_id = 2;</code>
        */
-      public context.ContextOuterClass.ConfigRule.Builder getConfigRulesBuilder(
-          int index) {
-        return getConfigRulesFieldBuilder().getBuilder(index);
+      public Builder setSliceId(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          sliceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.SliceId slice_id = 2;</code>
        */
-      public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
-          int index) {
-        if (configRulesBuilder_ == null) {
-          return configRules_.get(index);  } else {
-          return configRulesBuilder_.getMessageOrBuilder(index);
+      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (sliceId_ != null) {
+            sliceId_ =
+              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
+          } else {
+            sliceId_ = value;
+          }
+          onChanged();
+        } else {
+          sliceIdBuilder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.SliceId slice_id = 2;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
-           getConfigRulesOrBuilderList() {
-        if (configRulesBuilder_ != null) {
-          return configRulesBuilder_.getMessageOrBuilderList();
+      public Builder clearSliceId() {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(configRules_);
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.SliceId slice_id = 2;</code>
        */
-      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder() {
-        return getConfigRulesFieldBuilder().addBuilder(
-            context.ContextOuterClass.ConfigRule.getDefaultInstance());
+      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
+        
+        onChanged();
+        return getSliceIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.SliceId slice_id = 2;</code>
        */
-      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder(
-          int index) {
-        return getConfigRulesFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ConfigRule.getDefaultInstance());
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+        if (sliceIdBuilder_ != null) {
+          return sliceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return sliceId_ == null ?
+              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+        }
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>.context.SliceId slice_id = 2;</code>
        */
-      public java.util.List<context.ContextOuterClass.ConfigRule.Builder> 
-           getConfigRulesBuilderList() {
-        return getConfigRulesFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> 
-          getConfigRulesFieldBuilder() {
-        if (configRulesBuilder_ == null) {
-          configRulesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder>(
-                  configRules_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceIdFieldBuilder() {
+        if (sliceIdBuilder_ == null) {
+          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  getSliceId(),
                   getParentForChildren(),
                   isClean());
-          configRules_ = null;
+          sliceId_ = null;
         }
-        return configRulesBuilder_;
+        return sliceIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -34827,95 +44459,89 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceConfig)
+      // @@protoc_insertion_point(builder_scope:context.SliceEvent)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceConfig)
-    private static final context.ContextOuterClass.SliceConfig DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceEvent)
+    private static final context.ContextOuterClass.SliceEvent DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceConfig();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceEvent();
     }
 
-    public static context.ContextOuterClass.SliceConfig getDefaultInstance() {
+    public static context.ContextOuterClass.SliceEvent getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SliceConfig>
-        PARSER = new com.google.protobuf.AbstractParser<SliceConfig>() {
+    private static final com.google.protobuf.Parser<SliceEvent>
+        PARSER = new com.google.protobuf.AbstractParser<SliceEvent>() {
       @java.lang.Override
-      public SliceConfig parsePartialFrom(
+      public SliceEvent parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceConfig(input, extensionRegistry);
+        return new SliceEvent(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceConfig> parser() {
+    public static com.google.protobuf.Parser<SliceEvent> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceConfig> getParserForType() {
+    public com.google.protobuf.Parser<SliceEvent> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceConfig getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceEvent getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceIdList)
+  public interface ConnectionIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionId)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
-     */
-    java.util.List<context.ContextOuterClass.SliceId> 
-        getSliceIdsList();
-    /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
-     */
-    context.ContextOuterClass.SliceId getSliceIds(int index);
-    /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return Whether the connectionUuid field is set.
      */
-    int getSliceIdsCount();
+    boolean hasConnectionUuid();
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return The connectionUuid.
      */
-    java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-        getSliceIdsOrBuilderList();
+    context.ContextOuterClass.Uuid getConnectionUuid();
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>.context.Uuid connection_uuid = 1;</code>
      */
-    context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
-        int index);
+    context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder();
   }
   /**
-   * Protobuf type {@code context.SliceIdList}
+   * <pre>
+   * ----- Connection ----------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.ConnectionId}
    */
-  public static final class SliceIdList extends
+  public static final class ConnectionId extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceIdList)
-      SliceIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionId)
+      ConnectionIdOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceIdList.newBuilder() to construct.
-    private SliceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionId.newBuilder() to construct.
+    private ConnectionId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceIdList() {
-      sliceIds_ = java.util.Collections.emptyList();
+    private ConnectionId() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SliceIdList();
+      return new ConnectionId();
     }
 
     @java.lang.Override
@@ -34923,7 +44549,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceIdList(
+    private ConnectionId(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -34931,7 +44557,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -34943,12 +44568,16 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>();
-                mutable_bitField0_ |= 0x00000001;
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (connectionUuid_ != null) {
+                subBuilder = connectionUuid_.toBuilder();
               }
-              sliceIds_.add(
-                  input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry));
+              connectionUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(connectionUuid_);
+                connectionUuid_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -34966,64 +44595,47 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_SliceIdList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceIdList.class, context.ContextOuterClass.SliceIdList.Builder.class);
+              context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
     }
 
-    public static final int SLICE_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.SliceId> sliceIds_;
-    /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
-      return sliceIds_;
-    }
-    /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-        getSliceIdsOrBuilderList() {
-      return sliceIds_;
-    }
+    public static final int CONNECTION_UUID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid connectionUuid_;
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return Whether the connectionUuid field is set.
      */
     @java.lang.Override
-    public int getSliceIdsCount() {
-      return sliceIds_.size();
+    public boolean hasConnectionUuid() {
+      return connectionUuid_ != null;
     }
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return The connectionUuid.
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceId getSliceIds(int index) {
-      return sliceIds_.get(index);
+    public context.ContextOuterClass.Uuid getConnectionUuid() {
+      return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
     }
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>.context.Uuid connection_uuid = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
-        int index) {
-      return sliceIds_.get(index);
+    public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
+      return getConnectionUuid();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -35040,8 +44652,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < sliceIds_.size(); i++) {
-        output.writeMessage(1, sliceIds_.get(i));
+      if (connectionUuid_ != null) {
+        output.writeMessage(1, getConnectionUuid());
       }
       unknownFields.writeTo(output);
     }
@@ -35052,9 +44664,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < sliceIds_.size(); i++) {
+      if (connectionUuid_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, sliceIds_.get(i));
+          .computeMessageSize(1, getConnectionUuid());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -35066,13 +44678,16 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionId)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceIdList other = (context.ContextOuterClass.SliceIdList) obj;
+      context.ContextOuterClass.ConnectionId other = (context.ContextOuterClass.ConnectionId) obj;
 
-      if (!getSliceIdsList()
-          .equals(other.getSliceIdsList())) return false;
+      if (hasConnectionUuid() != other.hasConnectionUuid()) return false;
+      if (hasConnectionUuid()) {
+        if (!getConnectionUuid()
+            .equals(other.getConnectionUuid())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -35084,78 +44699,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getSliceIdsCount() > 0) {
-        hash = (37 * hash) + SLICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceIdsList().hashCode();
+      if (hasConnectionUuid()) {
+        hash = (37 * hash) + CONNECTION_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionUuid().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionId parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionId parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceIdList parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -35168,7 +44783,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.SliceIdList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionId prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -35184,26 +44799,30 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.SliceIdList}
+     * <pre>
+     * ----- Connection ----------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.ConnectionId}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.SliceIdList)
-        context.ContextOuterClass.SliceIdListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionId)
+        context.ContextOuterClass.ConnectionIdOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_SliceIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceIdList.class, context.ContextOuterClass.SliceIdList.Builder.class);
+                context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.SliceIdList.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionId.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -35216,17 +44835,16 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getSliceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (sliceIdsBuilder_ == null) {
-          sliceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = null;
         } else {
-          sliceIdsBuilder_.clear();
+          connectionUuid_ = null;
+          connectionUuidBuilder_ = null;
         }
         return this;
       }
@@ -35234,17 +44852,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceIdList.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionId.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceIdList build() {
-        context.ContextOuterClass.SliceIdList result = buildPartial();
+      public context.ContextOuterClass.ConnectionId build() {
+        context.ContextOuterClass.ConnectionId result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -35252,17 +44870,12 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceIdList buildPartial() {
-        context.ContextOuterClass.SliceIdList result = new context.ContextOuterClass.SliceIdList(this);
-        int from_bitField0_ = bitField0_;
-        if (sliceIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.sliceIds_ = sliceIds_;
+      public context.ContextOuterClass.ConnectionId buildPartial() {
+        context.ContextOuterClass.ConnectionId result = new context.ContextOuterClass.ConnectionId(this);
+        if (connectionUuidBuilder_ == null) {
+          result.connectionUuid_ = connectionUuid_;
         } else {
-          result.sliceIds_ = sliceIdsBuilder_.build();
+          result.connectionUuid_ = connectionUuidBuilder_.build();
         }
         onBuilt();
         return result;
@@ -35298,45 +44911,22 @@ public final class ContextOuterClass {
       public Builder addRepeatedField(
           com.google.protobuf.Descriptors.FieldDescriptor field,
           java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.SliceIdList) {
-          return mergeFrom((context.ContextOuterClass.SliceIdList)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(context.ContextOuterClass.SliceIdList other) {
-        if (other == context.ContextOuterClass.SliceIdList.getDefaultInstance()) return this;
-        if (sliceIdsBuilder_ == null) {
-          if (!other.sliceIds_.isEmpty()) {
-            if (sliceIds_.isEmpty()) {
-              sliceIds_ = other.sliceIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureSliceIdsIsMutable();
-              sliceIds_.addAll(other.sliceIds_);
-            }
-            onChanged();
-          }
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ConnectionId) {
+          return mergeFrom((context.ContextOuterClass.ConnectionId)other);
         } else {
-          if (!other.sliceIds_.isEmpty()) {
-            if (sliceIdsBuilder_.isEmpty()) {
-              sliceIdsBuilder_.dispose();
-              sliceIdsBuilder_ = null;
-              sliceIds_ = other.sliceIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              sliceIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSliceIdsFieldBuilder() : null;
-            } else {
-              sliceIdsBuilder_.addAllMessages(other.sliceIds_);
-            }
-          }
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionId other) {
+        if (other == context.ContextOuterClass.ConnectionId.getDefaultInstance()) return this;
+        if (other.hasConnectionUuid()) {
+          mergeConnectionUuid(other.getConnectionUuid());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -35353,11 +44943,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.SliceIdList parsedMessage = null;
+        context.ContextOuterClass.ConnectionId parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceIdList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionId) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -35366,246 +44956,124 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.SliceId> sliceIds_ =
-        java.util.Collections.emptyList();
-      private void ensureSliceIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>(sliceIds_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdsBuilder_;
 
+      private context.ContextOuterClass.Uuid connectionUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> connectionUuidBuilder_;
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
-        if (sliceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(sliceIds_);
-        } else {
-          return sliceIdsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       * @return Whether the connectionUuid field is set.
        */
-      public int getSliceIdsCount() {
-        if (sliceIdsBuilder_ == null) {
-          return sliceIds_.size();
-        } else {
-          return sliceIdsBuilder_.getCount();
-        }
+      public boolean hasConnectionUuid() {
+        return connectionUuidBuilder_ != null || connectionUuid_ != null;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       * @return The connectionUuid.
        */
-      public context.ContextOuterClass.SliceId getSliceIds(int index) {
-        if (sliceIdsBuilder_ == null) {
-          return sliceIds_.get(index);
+      public context.ContextOuterClass.Uuid getConnectionUuid() {
+        if (connectionUuidBuilder_ == null) {
+          return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
         } else {
-          return sliceIdsBuilder_.getMessage(index);
+          return connectionUuidBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder setSliceIds(
-          int index, context.ContextOuterClass.SliceId value) {
-        if (sliceIdsBuilder_ == null) {
+      public Builder setConnectionUuid(context.ContextOuterClass.Uuid value) {
+        if (connectionUuidBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSliceIdsIsMutable();
-          sliceIds_.set(index, value);
-          onChanged();
-        } else {
-          sliceIdsBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
-       */
-      public Builder setSliceIds(
-          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          sliceIds_.set(index, builderForValue.build());
+          connectionUuid_ = value;
           onChanged();
         } else {
-          sliceIdsBuilder_.setMessage(index, builderForValue.build());
+          connectionUuidBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder addSliceIds(context.ContextOuterClass.SliceId value) {
-        if (sliceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceIdsIsMutable();
-          sliceIds_.add(value);
+      public Builder setConnectionUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = builderForValue.build();
           onChanged();
         } else {
-          sliceIdsBuilder_.addMessage(value);
+          connectionUuidBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder addSliceIds(
-          int index, context.ContextOuterClass.SliceId value) {
-        if (sliceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeConnectionUuid(context.ContextOuterClass.Uuid value) {
+        if (connectionUuidBuilder_ == null) {
+          if (connectionUuid_ != null) {
+            connectionUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(connectionUuid_).mergeFrom(value).buildPartial();
+          } else {
+            connectionUuid_ = value;
           }
-          ensureSliceIdsIsMutable();
-          sliceIds_.add(index, value);
-          onChanged();
-        } else {
-          sliceIdsBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
-       */
-      public Builder addSliceIds(
-          context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          sliceIds_.add(builderForValue.build());
-          onChanged();
-        } else {
-          sliceIdsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
-       */
-      public Builder addSliceIds(
-          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          sliceIds_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          sliceIdsBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
-       */
-      public Builder addAllSliceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.SliceId> values) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, sliceIds_);
-          onChanged();
-        } else {
-          sliceIdsBuilder_.addAllMessages(values);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
-       */
-      public Builder clearSliceIds() {
-        if (sliceIdsBuilder_ == null) {
-          sliceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          sliceIdsBuilder_.clear();
+          connectionUuidBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder removeSliceIds(int index) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          sliceIds_.remove(index);
+      public Builder clearConnectionUuid() {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = null;
           onChanged();
         } else {
-          sliceIdsBuilder_.remove(index);
+          connectionUuid_ = null;
+          connectionUuidBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
-       */
-      public context.ContextOuterClass.SliceId.Builder getSliceIdsBuilder(
-          int index) {
-        return getSliceIdsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
-          int index) {
-        if (sliceIdsBuilder_ == null) {
-          return sliceIds_.get(index);  } else {
-          return sliceIdsBuilder_.getMessageOrBuilder(index);
-        }
+      public context.ContextOuterClass.Uuid.Builder getConnectionUuidBuilder() {
+        
+        onChanged();
+        return getConnectionUuidFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-           getSliceIdsOrBuilderList() {
-        if (sliceIdsBuilder_ != null) {
-          return sliceIdsBuilder_.getMessageOrBuilderList();
+      public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
+        if (connectionUuidBuilder_ != null) {
+          return connectionUuidBuilder_.getMessageOrBuilder();
         } else {
-          return java.util.Collections.unmodifiableList(sliceIds_);
+          return connectionUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
-       */
-      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder() {
-        return getSliceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.SliceId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
-       */
-      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder(
-          int index) {
-        return getSliceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.SliceId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.SliceId.Builder> 
-           getSliceIdsBuilderList() {
-        return getSliceIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
-          getSliceIdsFieldBuilder() {
-        if (sliceIdsBuilder_ == null) {
-          sliceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
-                  sliceIds_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getConnectionUuidFieldBuilder() {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getConnectionUuid(),
                   getParentForChildren(),
                   isClean());
-          sliceIds_ = null;
+          connectionUuid_ = null;
         }
-        return sliceIdsBuilder_;
+        return connectionUuidBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -35620,95 +45088,83 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceIdList)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionId)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceIdList)
-    private static final context.ContextOuterClass.SliceIdList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionId)
+    private static final context.ContextOuterClass.ConnectionId DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceIdList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionId();
     }
 
-    public static context.ContextOuterClass.SliceIdList getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionId getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SliceIdList>
-        PARSER = new com.google.protobuf.AbstractParser<SliceIdList>() {
+    private static final com.google.protobuf.Parser<ConnectionId>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionId>() {
       @java.lang.Override
-      public SliceIdList parsePartialFrom(
+      public ConnectionId parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceIdList(input, extensionRegistry);
+        return new ConnectionId(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceIdList> parser() {
+    public static com.google.protobuf.Parser<ConnectionId> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceIdList> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionId> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceIdList getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceList)
+  public interface ConnectionSettings_L0OrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L0)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
-     */
-    java.util.List<context.ContextOuterClass.Slice> 
-        getSlicesList();
-    /**
-     * <code>repeated .context.Slice slices = 1;</code>
-     */
-    context.ContextOuterClass.Slice getSlices(int index);
-    /**
-     * <code>repeated .context.Slice slices = 1;</code>
-     */
-    int getSlicesCount();
-    /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>string lsp_symbolic_name = 1;</code>
+     * @return The lspSymbolicName.
      */
-    java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
-        getSlicesOrBuilderList();
+    java.lang.String getLspSymbolicName();
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>string lsp_symbolic_name = 1;</code>
+     * @return The bytes for lspSymbolicName.
      */
-    context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
-        int index);
+    com.google.protobuf.ByteString
+        getLspSymbolicNameBytes();
   }
   /**
-   * Protobuf type {@code context.SliceList}
+   * Protobuf type {@code context.ConnectionSettings_L0}
    */
-  public static final class SliceList extends
+  public static final class ConnectionSettings_L0 extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceList)
-      SliceListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L0)
+      ConnectionSettings_L0OrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceList.newBuilder() to construct.
-    private SliceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings_L0.newBuilder() to construct.
+    private ConnectionSettings_L0(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceList() {
-      slices_ = java.util.Collections.emptyList();
+    private ConnectionSettings_L0() {
+      lspSymbolicName_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SliceList();
+      return new ConnectionSettings_L0();
     }
 
     @java.lang.Override
@@ -35716,7 +45172,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceList(
+    private ConnectionSettings_L0(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -35724,7 +45180,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -35736,12 +45191,9 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                slices_ = new java.util.ArrayList<context.ContextOuterClass.Slice>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              slices_.add(
-                  input.readMessage(context.ContextOuterClass.Slice.parser(), extensionRegistry));
+              java.lang.String s = input.readStringRequireUtf8();
+
+              lspSymbolicName_ = s;
               break;
             }
             default: {
@@ -35759,64 +45211,59 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          slices_ = java.util.Collections.unmodifiableList(slices_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_SliceList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceList.class, context.ContextOuterClass.SliceList.Builder.class);
+              context.ContextOuterClass.ConnectionSettings_L0.class, context.ContextOuterClass.ConnectionSettings_L0.Builder.class);
     }
 
-    public static final int SLICES_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Slice> slices_;
-    /**
-     * <code>repeated .context.Slice slices = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Slice> getSlicesList() {
-      return slices_;
-    }
-    /**
-     * <code>repeated .context.Slice slices = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
-        getSlicesOrBuilderList() {
-      return slices_;
-    }
-    /**
-     * <code>repeated .context.Slice slices = 1;</code>
-     */
-    @java.lang.Override
-    public int getSlicesCount() {
-      return slices_.size();
-    }
+    public static final int LSP_SYMBOLIC_NAME_FIELD_NUMBER = 1;
+    private volatile java.lang.Object lspSymbolicName_;
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>string lsp_symbolic_name = 1;</code>
+     * @return The lspSymbolicName.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Slice getSlices(int index) {
-      return slices_.get(index);
+    public java.lang.String getLspSymbolicName() {
+      java.lang.Object ref = lspSymbolicName_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        lspSymbolicName_ = s;
+        return s;
+      }
     }
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>string lsp_symbolic_name = 1;</code>
+     * @return The bytes for lspSymbolicName.
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
-        int index) {
-      return slices_.get(index);
+    public com.google.protobuf.ByteString
+        getLspSymbolicNameBytes() {
+      java.lang.Object ref = lspSymbolicName_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        lspSymbolicName_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
     private byte memoizedIsInitialized = -1;
@@ -35833,8 +45280,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < slices_.size(); i++) {
-        output.writeMessage(1, slices_.get(i));
+      if (!getLspSymbolicNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, lspSymbolicName_);
       }
       unknownFields.writeTo(output);
     }
@@ -35845,9 +45292,8 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < slices_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, slices_.get(i));
+      if (!getLspSymbolicNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, lspSymbolicName_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -35859,13 +45305,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceList)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L0)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceList other = (context.ContextOuterClass.SliceList) obj;
+      context.ContextOuterClass.ConnectionSettings_L0 other = (context.ContextOuterClass.ConnectionSettings_L0) obj;
 
-      if (!getSlicesList()
-          .equals(other.getSlicesList())) return false;
+      if (!getLspSymbolicName()
+          .equals(other.getLspSymbolicName())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -35877,78 +45323,76 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getSlicesCount() > 0) {
-        hash = (37 * hash) + SLICES_FIELD_NUMBER;
-        hash = (53 * hash) + getSlicesList().hashCode();
-      }
+      hash = (37 * hash) + LSP_SYMBOLIC_NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getLspSymbolicName().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceList parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -35961,7 +45405,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.SliceList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L0 prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -35977,26 +45421,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.SliceList}
+     * Protobuf type {@code context.ConnectionSettings_L0}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.SliceList)
-        context.ContextOuterClass.SliceListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L0)
+        context.ContextOuterClass.ConnectionSettings_L0OrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_SliceList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceList.class, context.ContextOuterClass.SliceList.Builder.class);
+                context.ContextOuterClass.ConnectionSettings_L0.class, context.ContextOuterClass.ConnectionSettings_L0.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.SliceList.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings_L0.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -36009,35 +45453,30 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getSlicesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (slicesBuilder_ == null) {
-          slices_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          slicesBuilder_.clear();
-        }
+        lspSymbolicName_ = "";
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceList getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceList.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceList build() {
-        context.ContextOuterClass.SliceList result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings_L0 build() {
+        context.ContextOuterClass.ConnectionSettings_L0 result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -36045,18 +45484,9 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceList buildPartial() {
-        context.ContextOuterClass.SliceList result = new context.ContextOuterClass.SliceList(this);
-        int from_bitField0_ = bitField0_;
-        if (slicesBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            slices_ = java.util.Collections.unmodifiableList(slices_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.slices_ = slices_;
-        } else {
-          result.slices_ = slicesBuilder_.build();
-        }
+      public context.ContextOuterClass.ConnectionSettings_L0 buildPartial() {
+        context.ContextOuterClass.ConnectionSettings_L0 result = new context.ContextOuterClass.ConnectionSettings_L0(this);
+        result.lspSymbolicName_ = lspSymbolicName_;
         onBuilt();
         return result;
       }
@@ -36095,41 +45525,19 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.SliceList) {
-          return mergeFrom((context.ContextOuterClass.SliceList)other);
+        if (other instanceof context.ContextOuterClass.ConnectionSettings_L0) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L0)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.SliceList other) {
-        if (other == context.ContextOuterClass.SliceList.getDefaultInstance()) return this;
-        if (slicesBuilder_ == null) {
-          if (!other.slices_.isEmpty()) {
-            if (slices_.isEmpty()) {
-              slices_ = other.slices_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureSlicesIsMutable();
-              slices_.addAll(other.slices_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.slices_.isEmpty()) {
-            if (slicesBuilder_.isEmpty()) {
-              slicesBuilder_.dispose();
-              slicesBuilder_ = null;
-              slices_ = other.slices_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              slicesBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSlicesFieldBuilder() : null;
-            } else {
-              slicesBuilder_.addAllMessages(other.slices_);
-            }
-          }
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L0 other) {
+        if (other == context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance()) return this;
+        if (!other.getLspSymbolicName().isEmpty()) {
+          lspSymbolicName_ = other.lspSymbolicName_;
+          onChanged();
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -36146,11 +45554,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.SliceList parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings_L0 parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L0) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -36159,247 +45567,82 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.Slice> slices_ =
-        java.util.Collections.emptyList();
-      private void ensureSlicesIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          slices_ = new java.util.ArrayList<context.ContextOuterClass.Slice>(slices_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder> slicesBuilder_;
 
+      private java.lang.Object lspSymbolicName_ = "";
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.Slice> getSlicesList() {
-        if (slicesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(slices_);
-        } else {
-          return slicesBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.Slice slices = 1;</code>
-       */
-      public int getSlicesCount() {
-        if (slicesBuilder_ == null) {
-          return slices_.size();
-        } else {
-          return slicesBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .context.Slice slices = 1;</code>
-       */
-      public context.ContextOuterClass.Slice getSlices(int index) {
-        if (slicesBuilder_ == null) {
-          return slices_.get(index);
-        } else {
-          return slicesBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .context.Slice slices = 1;</code>
-       */
-      public Builder setSlices(
-          int index, context.ContextOuterClass.Slice value) {
-        if (slicesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSlicesIsMutable();
-          slices_.set(index, value);
-          onChanged();
-        } else {
-          slicesBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.Slice slices = 1;</code>
-       */
-      public Builder setSlices(
-          int index, context.ContextOuterClass.Slice.Builder builderForValue) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          slices_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          slicesBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.Slice slices = 1;</code>
-       */
-      public Builder addSlices(context.ContextOuterClass.Slice value) {
-        if (slicesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSlicesIsMutable();
-          slices_.add(value);
-          onChanged();
-        } else {
-          slicesBuilder_.addMessage(value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.Slice slices = 1;</code>
-       */
-      public Builder addSlices(
-          int index, context.ContextOuterClass.Slice value) {
-        if (slicesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSlicesIsMutable();
-          slices_.add(index, value);
-          onChanged();
-        } else {
-          slicesBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @return The lspSymbolicName.
        */
-      public Builder addSlices(
-          context.ContextOuterClass.Slice.Builder builderForValue) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          slices_.add(builderForValue.build());
-          onChanged();
+      public java.lang.String getLspSymbolicName() {
+        java.lang.Object ref = lspSymbolicName_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          lspSymbolicName_ = s;
+          return s;
         } else {
-          slicesBuilder_.addMessage(builderForValue.build());
+          return (java.lang.String) ref;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @return The bytes for lspSymbolicName.
        */
-      public Builder addSlices(
-          int index, context.ContextOuterClass.Slice.Builder builderForValue) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          slices_.add(index, builderForValue.build());
-          onChanged();
+      public com.google.protobuf.ByteString
+          getLspSymbolicNameBytes() {
+        java.lang.Object ref = lspSymbolicName_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          lspSymbolicName_ = b;
+          return b;
         } else {
-          slicesBuilder_.addMessage(index, builderForValue.build());
+          return (com.google.protobuf.ByteString) ref;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @param value The lspSymbolicName to set.
+       * @return This builder for chaining.
        */
-      public Builder addAllSlices(
-          java.lang.Iterable<? extends context.ContextOuterClass.Slice> values) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, slices_);
-          onChanged();
-        } else {
-          slicesBuilder_.addAllMessages(values);
-        }
+      public Builder setLspSymbolicName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        lspSymbolicName_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder clearSlices() {
-        if (slicesBuilder_ == null) {
-          slices_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          slicesBuilder_.clear();
-        }
+      public Builder clearLspSymbolicName() {
+        
+        lspSymbolicName_ = getDefaultInstance().getLspSymbolicName();
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @param value The bytes for lspSymbolicName to set.
+       * @return This builder for chaining.
        */
-      public Builder removeSlices(int index) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          slices_.remove(index);
-          onChanged();
-        } else {
-          slicesBuilder_.remove(index);
-        }
+      public Builder setLspSymbolicNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        lspSymbolicName_ = value;
+        onChanged();
         return this;
       }
-      /**
-       * <code>repeated .context.Slice slices = 1;</code>
-       */
-      public context.ContextOuterClass.Slice.Builder getSlicesBuilder(
-          int index) {
-        return getSlicesFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.Slice slices = 1;</code>
-       */
-      public context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
-          int index) {
-        if (slicesBuilder_ == null) {
-          return slices_.get(index);  } else {
-          return slicesBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .context.Slice slices = 1;</code>
-       */
-      public java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
-           getSlicesOrBuilderList() {
-        if (slicesBuilder_ != null) {
-          return slicesBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(slices_);
-        }
-      }
-      /**
-       * <code>repeated .context.Slice slices = 1;</code>
-       */
-      public context.ContextOuterClass.Slice.Builder addSlicesBuilder() {
-        return getSlicesFieldBuilder().addBuilder(
-            context.ContextOuterClass.Slice.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.Slice slices = 1;</code>
-       */
-      public context.ContextOuterClass.Slice.Builder addSlicesBuilder(
-          int index) {
-        return getSlicesFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Slice.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.Slice slices = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.Slice.Builder> 
-           getSlicesBuilderList() {
-        return getSlicesFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder> 
-          getSlicesFieldBuilder() {
-        if (slicesBuilder_ == null) {
-          slicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder>(
-                  slices_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          slices_ = null;
-        }
-        return slicesBuilder_;
-      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -36413,100 +45656,120 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceList)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L0)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceList)
-    private static final context.ContextOuterClass.SliceList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L0)
+    private static final context.ContextOuterClass.ConnectionSettings_L0 DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L0();
     }
 
-    public static context.ContextOuterClass.SliceList getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SliceList>
-        PARSER = new com.google.protobuf.AbstractParser<SliceList>() {
+    private static final com.google.protobuf.Parser<ConnectionSettings_L0>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L0>() {
       @java.lang.Override
-      public SliceList parsePartialFrom(
+      public ConnectionSettings_L0 parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceList(input, extensionRegistry);
+        return new ConnectionSettings_L0(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceList> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings_L0> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceList> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings_L0> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceList getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceEvent)
+  public interface ConnectionSettings_L2OrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L2)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>string src_mac_address = 1;</code>
+     * @return The srcMacAddress.
      */
-    boolean hasEvent();
+    java.lang.String getSrcMacAddress();
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>string src_mac_address = 1;</code>
+     * @return The bytes for srcMacAddress.
      */
-    context.ContextOuterClass.Event getEvent();
+    com.google.protobuf.ByteString
+        getSrcMacAddressBytes();
+
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>string dst_mac_address = 2;</code>
+     * @return The dstMacAddress.
      */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+    java.lang.String getDstMacAddress();
+    /**
+     * <code>string dst_mac_address = 2;</code>
+     * @return The bytes for dstMacAddress.
+     */
+    com.google.protobuf.ByteString
+        getDstMacAddressBytes();
 
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
-     * @return Whether the sliceId field is set.
+     * <code>uint32 ether_type = 3;</code>
+     * @return The etherType.
      */
-    boolean hasSliceId();
+    int getEtherType();
+
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
-     * @return The sliceId.
+     * <code>uint32 vlan_id = 4;</code>
+     * @return The vlanId.
      */
-    context.ContextOuterClass.SliceId getSliceId();
+    int getVlanId();
+
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
+     * <code>uint32 mpls_label = 5;</code>
+     * @return The mplsLabel.
      */
-    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
+    int getMplsLabel();
+
+    /**
+     * <code>uint32 mpls_traffic_class = 6;</code>
+     * @return The mplsTrafficClass.
+     */
+    int getMplsTrafficClass();
   }
   /**
-   * Protobuf type {@code context.SliceEvent}
+   * Protobuf type {@code context.ConnectionSettings_L2}
    */
-  public static final class SliceEvent extends
+  public static final class ConnectionSettings_L2 extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceEvent)
-      SliceEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L2)
+      ConnectionSettings_L2OrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceEvent.newBuilder() to construct.
-    private SliceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings_L2.newBuilder() to construct.
+    private ConnectionSettings_L2(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceEvent() {
+    private ConnectionSettings_L2() {
+      srcMacAddress_ = "";
+      dstMacAddress_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SliceEvent();
+      return new ConnectionSettings_L2();
     }
 
     @java.lang.Override
@@ -36514,7 +45777,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceEvent(
+    private ConnectionSettings_L2(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -36533,29 +45796,35 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Event.Builder subBuilder = null;
-              if (event_ != null) {
-                subBuilder = event_.toBuilder();
-              }
-              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(event_);
-                event_ = subBuilder.buildPartial();
-              }
+              java.lang.String s = input.readStringRequireUtf8();
 
+              srcMacAddress_ = s;
               break;
             }
             case 18: {
-              context.ContextOuterClass.SliceId.Builder subBuilder = null;
-              if (sliceId_ != null) {
-                subBuilder = sliceId_.toBuilder();
-              }
-              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(sliceId_);
-                sliceId_ = subBuilder.buildPartial();
-              }
+              java.lang.String s = input.readStringRequireUtf8();
+
+              dstMacAddress_ = s;
+              break;
+            }
+            case 24: {
+
+              etherType_ = input.readUInt32();
+              break;
+            }
+            case 32: {
+
+              vlanId_ = input.readUInt32();
+              break;
+            }
+            case 40: {
+
+              mplsLabel_ = input.readUInt32();
+              break;
+            }
+            case 48: {
 
+              mplsTrafficClass_ = input.readUInt32();
               break;
             }
             default: {
@@ -36579,67 +45848,135 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_SliceEvent_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceEvent.class, context.ContextOuterClass.SliceEvent.Builder.class);
+              context.ContextOuterClass.ConnectionSettings_L2.class, context.ContextOuterClass.ConnectionSettings_L2.Builder.class);
+    }
+
+    public static final int SRC_MAC_ADDRESS_FIELD_NUMBER = 1;
+    private volatile java.lang.Object srcMacAddress_;
+    /**
+     * <code>string src_mac_address = 1;</code>
+     * @return The srcMacAddress.
+     */
+    @java.lang.Override
+    public java.lang.String getSrcMacAddress() {
+      java.lang.Object ref = srcMacAddress_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        srcMacAddress_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string src_mac_address = 1;</code>
+     * @return The bytes for srcMacAddress.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getSrcMacAddressBytes() {
+      java.lang.Object ref = srcMacAddress_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        srcMacAddress_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
-    public static final int EVENT_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Event event_;
+    public static final int DST_MAC_ADDRESS_FIELD_NUMBER = 2;
+    private volatile java.lang.Object dstMacAddress_;
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>string dst_mac_address = 2;</code>
+     * @return The dstMacAddress.
      */
     @java.lang.Override
-    public boolean hasEvent() {
-      return event_ != null;
+    public java.lang.String getDstMacAddress() {
+      java.lang.Object ref = dstMacAddress_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        dstMacAddress_ = s;
+        return s;
+      }
     }
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>string dst_mac_address = 2;</code>
+     * @return The bytes for dstMacAddress.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    public com.google.protobuf.ByteString
+        getDstMacAddressBytes() {
+      java.lang.Object ref = dstMacAddress_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        dstMacAddress_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
+
+    public static final int ETHER_TYPE_FIELD_NUMBER = 3;
+    private int etherType_;
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>uint32 ether_type = 3;</code>
+     * @return The etherType.
      */
     @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
+    public int getEtherType() {
+      return etherType_;
     }
 
-    public static final int SLICE_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.SliceId sliceId_;
+    public static final int VLAN_ID_FIELD_NUMBER = 4;
+    private int vlanId_;
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
-     * @return Whether the sliceId field is set.
+     * <code>uint32 vlan_id = 4;</code>
+     * @return The vlanId.
      */
     @java.lang.Override
-    public boolean hasSliceId() {
-      return sliceId_ != null;
+    public int getVlanId() {
+      return vlanId_;
     }
+
+    public static final int MPLS_LABEL_FIELD_NUMBER = 5;
+    private int mplsLabel_;
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
-     * @return The sliceId.
+     * <code>uint32 mpls_label = 5;</code>
+     * @return The mplsLabel.
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceId getSliceId() {
-      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+    public int getMplsLabel() {
+      return mplsLabel_;
     }
+
+    public static final int MPLS_TRAFFIC_CLASS_FIELD_NUMBER = 6;
+    private int mplsTrafficClass_;
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
+     * <code>uint32 mpls_traffic_class = 6;</code>
+     * @return The mplsTrafficClass.
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-      return getSliceId();
+    public int getMplsTrafficClass() {
+      return mplsTrafficClass_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -36656,11 +45993,23 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (event_ != null) {
-        output.writeMessage(1, getEvent());
+      if (!getSrcMacAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcMacAddress_);
       }
-      if (sliceId_ != null) {
-        output.writeMessage(2, getSliceId());
+      if (!getDstMacAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dstMacAddress_);
+      }
+      if (etherType_ != 0) {
+        output.writeUInt32(3, etherType_);
+      }
+      if (vlanId_ != 0) {
+        output.writeUInt32(4, vlanId_);
+      }
+      if (mplsLabel_ != 0) {
+        output.writeUInt32(5, mplsLabel_);
+      }
+      if (mplsTrafficClass_ != 0) {
+        output.writeUInt32(6, mplsTrafficClass_);
       }
       unknownFields.writeTo(output);
     }
@@ -36671,13 +46020,27 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (event_ != null) {
+      if (!getSrcMacAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcMacAddress_);
+      }
+      if (!getDstMacAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dstMacAddress_);
+      }
+      if (etherType_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
+          .computeUInt32Size(3, etherType_);
       }
-      if (sliceId_ != null) {
+      if (vlanId_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getSliceId());
+          .computeUInt32Size(4, vlanId_);
+      }
+      if (mplsLabel_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(5, mplsLabel_);
+      }
+      if (mplsTrafficClass_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(6, mplsTrafficClass_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -36689,21 +46052,23 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceEvent)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L2)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceEvent other = (context.ContextOuterClass.SliceEvent) obj;
+      context.ContextOuterClass.ConnectionSettings_L2 other = (context.ContextOuterClass.ConnectionSettings_L2) obj;
 
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) return false;
-      }
-      if (hasSliceId() != other.hasSliceId()) return false;
-      if (hasSliceId()) {
-        if (!getSliceId()
-            .equals(other.getSliceId())) return false;
-      }
+      if (!getSrcMacAddress()
+          .equals(other.getSrcMacAddress())) return false;
+      if (!getDstMacAddress()
+          .equals(other.getDstMacAddress())) return false;
+      if (getEtherType()
+          != other.getEtherType()) return false;
+      if (getVlanId()
+          != other.getVlanId()) return false;
+      if (getMplsLabel()
+          != other.getMplsLabel()) return false;
+      if (getMplsTrafficClass()
+          != other.getMplsTrafficClass()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -36715,82 +46080,86 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEvent()) {
-        hash = (37 * hash) + EVENT_FIELD_NUMBER;
-        hash = (53 * hash) + getEvent().hashCode();
-      }
-      if (hasSliceId()) {
-        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceId().hashCode();
-      }
+      hash = (37 * hash) + SRC_MAC_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getSrcMacAddress().hashCode();
+      hash = (37 * hash) + DST_MAC_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getDstMacAddress().hashCode();
+      hash = (37 * hash) + ETHER_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getEtherType();
+      hash = (37 * hash) + VLAN_ID_FIELD_NUMBER;
+      hash = (53 * hash) + getVlanId();
+      hash = (37 * hash) + MPLS_LABEL_FIELD_NUMBER;
+      hash = (53 * hash) + getMplsLabel();
+      hash = (37 * hash) + MPLS_TRAFFIC_CLASS_FIELD_NUMBER;
+      hash = (53 * hash) + getMplsTrafficClass();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceEvent parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -36803,7 +46172,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.SliceEvent prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L2 prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -36819,26 +46188,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.SliceEvent}
+     * Protobuf type {@code context.ConnectionSettings_L2}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.SliceEvent)
-        context.ContextOuterClass.SliceEventOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L2)
+        context.ContextOuterClass.ConnectionSettings_L2OrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_SliceEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceEvent.class, context.ContextOuterClass.SliceEvent.Builder.class);
+                context.ContextOuterClass.ConnectionSettings_L2.class, context.ContextOuterClass.ConnectionSettings_L2.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.SliceEvent.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings_L2.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -36856,35 +46225,35 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
-        } else {
-          event_ = null;
-          eventBuilder_ = null;
-        }
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
-        } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
-        }
+        srcMacAddress_ = "";
+
+        dstMacAddress_ = "";
+
+        etherType_ = 0;
+
+        vlanId_ = 0;
+
+        mplsLabel_ = 0;
+
+        mplsTrafficClass_ = 0;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceEvent.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceEvent build() {
-        context.ContextOuterClass.SliceEvent result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings_L2 build() {
+        context.ContextOuterClass.ConnectionSettings_L2 result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -36892,18 +46261,14 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceEvent buildPartial() {
-        context.ContextOuterClass.SliceEvent result = new context.ContextOuterClass.SliceEvent(this);
-        if (eventBuilder_ == null) {
-          result.event_ = event_;
-        } else {
-          result.event_ = eventBuilder_.build();
-        }
-        if (sliceIdBuilder_ == null) {
-          result.sliceId_ = sliceId_;
-        } else {
-          result.sliceId_ = sliceIdBuilder_.build();
-        }
+      public context.ContextOuterClass.ConnectionSettings_L2 buildPartial() {
+        context.ContextOuterClass.ConnectionSettings_L2 result = new context.ContextOuterClass.ConnectionSettings_L2(this);
+        result.srcMacAddress_ = srcMacAddress_;
+        result.dstMacAddress_ = dstMacAddress_;
+        result.etherType_ = etherType_;
+        result.vlanId_ = vlanId_;
+        result.mplsLabel_ = mplsLabel_;
+        result.mplsTrafficClass_ = mplsTrafficClass_;
         onBuilt();
         return result;
       }
@@ -36942,21 +46307,35 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.SliceEvent) {
-          return mergeFrom((context.ContextOuterClass.SliceEvent)other);
+        if (other instanceof context.ContextOuterClass.ConnectionSettings_L2) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L2)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.SliceEvent other) {
-        if (other == context.ContextOuterClass.SliceEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L2 other) {
+        if (other == context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance()) return this;
+        if (!other.getSrcMacAddress().isEmpty()) {
+          srcMacAddress_ = other.srcMacAddress_;
+          onChanged();
         }
-        if (other.hasSliceId()) {
-          mergeSliceId(other.getSliceId());
+        if (!other.getDstMacAddress().isEmpty()) {
+          dstMacAddress_ = other.dstMacAddress_;
+          onChanged();
+        }
+        if (other.getEtherType() != 0) {
+          setEtherType(other.getEtherType());
+        }
+        if (other.getVlanId() != 0) {
+          setVlanId(other.getVlanId());
+        }
+        if (other.getMplsLabel() != 0) {
+          setMplsLabel(other.getMplsLabel());
+        }
+        if (other.getMplsTrafficClass() != 0) {
+          setMplsTrafficClass(other.getMplsTrafficClass());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -36973,11 +46352,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.SliceEvent parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings_L2 parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceEvent) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L2) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -36987,242 +46366,284 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private context.ContextOuterClass.Event event_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
+      private java.lang.Object srcMacAddress_ = "";
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return Whether the event field is set.
+       * <code>string src_mac_address = 1;</code>
+       * @return The srcMacAddress.
        */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
+      public java.lang.String getSrcMacAddress() {
+        java.lang.Object ref = srcMacAddress_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          srcMacAddress_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
+       * <code>string src_mac_address = 1;</code>
+       * @return The bytes for srcMacAddress.
        */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+      public com.google.protobuf.ByteString
+          getSrcMacAddressBytes() {
+        java.lang.Object ref = srcMacAddress_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          srcMacAddress_ = b;
+          return b;
         } else {
-          return eventBuilder_.getMessage();
+          return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>string src_mac_address = 1;</code>
+       * @param value The srcMacAddress to set.
+       * @return This builder for chaining.
        */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          event_ = value;
-          onChanged();
-        } else {
-          eventBuilder_.setMessage(value);
-        }
-
+      public Builder setSrcMacAddress(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        srcMacAddress_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>string src_mac_address = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
-          onChanged();
-        } else {
-          eventBuilder_.setMessage(builderForValue.build());
-        }
-
+      public Builder clearSrcMacAddress() {
+        
+        srcMacAddress_ = getDefaultInstance().getSrcMacAddress();
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>string src_mac_address = 1;</code>
+       * @param value The bytes for srcMacAddress to set.
+       * @return This builder for chaining.
        */
-      public Builder mergeEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
-          if (event_ != null) {
-            event_ =
-              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
-          } else {
-            event_ = value;
-          }
-          onChanged();
+      public Builder setSrcMacAddressBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        srcMacAddress_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object dstMacAddress_ = "";
+      /**
+       * <code>string dst_mac_address = 2;</code>
+       * @return The dstMacAddress.
+       */
+      public java.lang.String getDstMacAddress() {
+        java.lang.Object ref = dstMacAddress_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          dstMacAddress_ = s;
+          return s;
         } else {
-          eventBuilder_.mergeFrom(value);
+          return (java.lang.String) ref;
         }
-
-        return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>string dst_mac_address = 2;</code>
+       * @return The bytes for dstMacAddress.
        */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
-          onChanged();
+      public com.google.protobuf.ByteString
+          getDstMacAddressBytes() {
+        java.lang.Object ref = dstMacAddress_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          dstMacAddress_ = b;
+          return b;
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          return (com.google.protobuf.ByteString) ref;
         }
+      }
+      /**
+       * <code>string dst_mac_address = 2;</code>
+       * @param value The dstMacAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDstMacAddress(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        dstMacAddress_ = value;
+        onChanged();
+        return this;
+      }
 
+      private int etherType_ ;
+      /**
+       * <code>string dst_mac_address = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDstMacAddress() {
+        
+        dstMacAddress_ = getDefaultInstance().getDstMacAddress();
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>string dst_mac_address = 2;</code>
+       * @param value The bytes for dstMacAddress to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+      public Builder setDstMacAddressBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
         
+        dstMacAddress_ = value;
         onChanged();
-        return getEventFieldBuilder().getBuilder();
+        return this;
       }
+
+      private int etherType_ ;
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>uint32 ether_type = 3;</code>
+       * @return The etherType.
        */
-      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-        if (eventBuilder_ != null) {
-          return eventBuilder_.getMessageOrBuilder();
-        } else {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
-        }
+      @java.lang.Override
+      public int getEtherType() {
+        return etherType_;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>uint32 ether_type = 3;</code>
+       * @param value The etherType to set.
+       * @return This builder for chaining.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
-          getEventFieldBuilder() {
-        if (eventBuilder_ == null) {
-          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
-                  getEvent(),
-                  getParentForChildren(),
-                  isClean());
-          event_ = null;
-        }
-        return eventBuilder_;
+      public Builder setEtherType(int value) {
+        
+        etherType_ = value;
+        onChanged();
+        return this;
       }
-
-      private context.ContextOuterClass.SliceId sliceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
-       * @return Whether the sliceId field is set.
+       * <code>uint32 ether_type = 3;</code>
+       * @return This builder for chaining.
        */
-      public boolean hasSliceId() {
-        return sliceIdBuilder_ != null || sliceId_ != null;
+      public Builder clearEtherType() {
+        
+        etherType_ = 0;
+        onChanged();
+        return this;
       }
+
+      private int vlanId_ ;
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
-       * @return The sliceId.
+       * <code>uint32 vlan_id = 4;</code>
+       * @return The vlanId.
        */
-      public context.ContextOuterClass.SliceId getSliceId() {
-        if (sliceIdBuilder_ == null) {
-          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
-        } else {
-          return sliceIdBuilder_.getMessage();
-        }
+      @java.lang.Override
+      public int getVlanId() {
+        return vlanId_;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>uint32 vlan_id = 4;</code>
+       * @param value The vlanId to set.
+       * @return This builder for chaining.
        */
-      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          sliceId_ = value;
-          onChanged();
-        } else {
-          sliceIdBuilder_.setMessage(value);
-        }
-
+      public Builder setVlanId(int value) {
+        
+        vlanId_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>uint32 vlan_id = 4;</code>
+       * @return This builder for chaining.
        */
-      public Builder setSliceId(
-          context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = builderForValue.build();
-          onChanged();
-        } else {
-          sliceIdBuilder_.setMessage(builderForValue.build());
-        }
-
+      public Builder clearVlanId() {
+        
+        vlanId_ = 0;
+        onChanged();
         return this;
       }
+
+      private int mplsLabel_ ;
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>uint32 mpls_label = 5;</code>
+       * @return The mplsLabel.
        */
-      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
-          if (sliceId_ != null) {
-            sliceId_ =
-              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
-          } else {
-            sliceId_ = value;
-          }
-          onChanged();
-        } else {
-          sliceIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
+      @java.lang.Override
+      public int getMplsLabel() {
+        return mplsLabel_;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>uint32 mpls_label = 5;</code>
+       * @param value The mplsLabel to set.
+       * @return This builder for chaining.
        */
-      public Builder clearSliceId() {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
-          onChanged();
-        } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
-        }
-
+      public Builder setMplsLabel(int value) {
+        
+        mplsLabel_ = value;
+        onChanged();
         return this;
       }
+
+      private int mplsTrafficClass_ ;
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>uint32 mpls_label = 5;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
+      public Builder clearMplsLabel() {
         
+        mplsLabel_ = 0;
         onChanged();
-        return getSliceIdFieldBuilder().getBuilder();
+        return this;
       }
+
+      private int mplsTrafficClass_ ;
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>uint32 mpls_traffic_class = 6;</code>
+       * @return The mplsTrafficClass.
        */
-      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-        if (sliceIdBuilder_ != null) {
-          return sliceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return sliceId_ == null ?
-              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
-        }
+      @java.lang.Override
+      public int getMplsTrafficClass() {
+        return mplsTrafficClass_;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>uint32 mpls_traffic_class = 6;</code>
+       * @param value The mplsTrafficClass to set.
+       * @return This builder for chaining.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
-          getSliceIdFieldBuilder() {
-        if (sliceIdBuilder_ == null) {
-          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
-                  getSliceId(),
-                  getParentForChildren(),
-                  isClean());
-          sliceId_ = null;
-        }
-        return sliceIdBuilder_;
+      public Builder setMplsTrafficClass(int value) {
+        
+        mplsTrafficClass_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 mpls_traffic_class = 6;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearMplsTrafficClass() {
+        
+        mplsTrafficClass_ = 0;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -37237,89 +46658,114 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceEvent)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L2)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceEvent)
-    private static final context.ContextOuterClass.SliceEvent DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L2)
+    private static final context.ContextOuterClass.ConnectionSettings_L2 DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceEvent();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L2();
     }
 
-    public static context.ContextOuterClass.SliceEvent getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SliceEvent>
-        PARSER = new com.google.protobuf.AbstractParser<SliceEvent>() {
+    private static final com.google.protobuf.Parser<ConnectionSettings_L2>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L2>() {
       @java.lang.Override
-      public SliceEvent parsePartialFrom(
+      public ConnectionSettings_L2 parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceEvent(input, extensionRegistry);
+        return new ConnectionSettings_L2(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceEvent> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings_L2> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceEvent> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings_L2> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceEvent getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionId)
+  public interface ConnectionSettings_L3OrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L3)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return Whether the connectionUuid field is set.
+     * <code>string src_ip_address = 1;</code>
+     * @return The srcIpAddress.
      */
-    boolean hasConnectionUuid();
+    java.lang.String getSrcIpAddress();
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return The connectionUuid.
+     * <code>string src_ip_address = 1;</code>
+     * @return The bytes for srcIpAddress.
      */
-    context.ContextOuterClass.Uuid getConnectionUuid();
+    com.google.protobuf.ByteString
+        getSrcIpAddressBytes();
+
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
+     * <code>string dst_ip_address = 2;</code>
+     * @return The dstIpAddress.
      */
-    context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder();
+    java.lang.String getDstIpAddress();
+    /**
+     * <code>string dst_ip_address = 2;</code>
+     * @return The bytes for dstIpAddress.
+     */
+    com.google.protobuf.ByteString
+        getDstIpAddressBytes();
+
+    /**
+     * <code>uint32 dscp = 3;</code>
+     * @return The dscp.
+     */
+    int getDscp();
+
+    /**
+     * <code>uint32 protocol = 4;</code>
+     * @return The protocol.
+     */
+    int getProtocol();
+
+    /**
+     * <code>uint32 ttl = 5;</code>
+     * @return The ttl.
+     */
+    int getTtl();
   }
   /**
-   * <pre>
-   * ----- Connection ----------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.ConnectionId}
+   * Protobuf type {@code context.ConnectionSettings_L3}
    */
-  public static final class ConnectionId extends
+  public static final class ConnectionSettings_L3 extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionId)
-      ConnectionIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L3)
+      ConnectionSettings_L3OrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionId.newBuilder() to construct.
-    private ConnectionId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings_L3.newBuilder() to construct.
+    private ConnectionSettings_L3(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionId() {
+    private ConnectionSettings_L3() {
+      srcIpAddress_ = "";
+      dstIpAddress_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionId();
+      return new ConnectionSettings_L3();
     }
 
     @java.lang.Override
@@ -37327,7 +46773,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionId(
+    private ConnectionSettings_L3(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -37346,16 +46792,30 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (connectionUuid_ != null) {
-                subBuilder = connectionUuid_.toBuilder();
-              }
-              connectionUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(connectionUuid_);
-                connectionUuid_ = subBuilder.buildPartial();
-              }
+              java.lang.String s = input.readStringRequireUtf8();
+
+              srcIpAddress_ = s;
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              dstIpAddress_ = s;
+              break;
+            }
+            case 24: {
+
+              dscp_ = input.readUInt32();
+              break;
+            }
+            case 32: {
+
+              protocol_ = input.readUInt32();
+              break;
+            }
+            case 40: {
 
+              ttl_ = input.readUInt32();
               break;
             }
             default: {
@@ -37379,41 +46839,124 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
+              context.ContextOuterClass.ConnectionSettings_L3.class, context.ContextOuterClass.ConnectionSettings_L3.Builder.class);
     }
 
-    public static final int CONNECTION_UUID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid connectionUuid_;
+    public static final int SRC_IP_ADDRESS_FIELD_NUMBER = 1;
+    private volatile java.lang.Object srcIpAddress_;
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return Whether the connectionUuid field is set.
+     * <code>string src_ip_address = 1;</code>
+     * @return The srcIpAddress.
      */
     @java.lang.Override
-    public boolean hasConnectionUuid() {
-      return connectionUuid_ != null;
+    public java.lang.String getSrcIpAddress() {
+      java.lang.Object ref = srcIpAddress_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        srcIpAddress_ = s;
+        return s;
+      }
     }
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return The connectionUuid.
+     * <code>string src_ip_address = 1;</code>
+     * @return The bytes for srcIpAddress.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getConnectionUuid() {
-      return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+    public com.google.protobuf.ByteString
+        getSrcIpAddressBytes() {
+      java.lang.Object ref = srcIpAddress_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        srcIpAddress_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
+
+    public static final int DST_IP_ADDRESS_FIELD_NUMBER = 2;
+    private volatile java.lang.Object dstIpAddress_;
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
+     * <code>string dst_ip_address = 2;</code>
+     * @return The dstIpAddress.
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
-      return getConnectionUuid();
+    public java.lang.String getDstIpAddress() {
+      java.lang.Object ref = dstIpAddress_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        dstIpAddress_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string dst_ip_address = 2;</code>
+     * @return The bytes for dstIpAddress.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getDstIpAddressBytes() {
+      java.lang.Object ref = dstIpAddress_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        dstIpAddress_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int DSCP_FIELD_NUMBER = 3;
+    private int dscp_;
+    /**
+     * <code>uint32 dscp = 3;</code>
+     * @return The dscp.
+     */
+    @java.lang.Override
+    public int getDscp() {
+      return dscp_;
+    }
+
+    public static final int PROTOCOL_FIELD_NUMBER = 4;
+    private int protocol_;
+    /**
+     * <code>uint32 protocol = 4;</code>
+     * @return The protocol.
+     */
+    @java.lang.Override
+    public int getProtocol() {
+      return protocol_;
+    }
+
+    public static final int TTL_FIELD_NUMBER = 5;
+    private int ttl_;
+    /**
+     * <code>uint32 ttl = 5;</code>
+     * @return The ttl.
+     */
+    @java.lang.Override
+    public int getTtl() {
+      return ttl_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -37430,8 +46973,20 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (connectionUuid_ != null) {
-        output.writeMessage(1, getConnectionUuid());
+      if (!getSrcIpAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcIpAddress_);
+      }
+      if (!getDstIpAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dstIpAddress_);
+      }
+      if (dscp_ != 0) {
+        output.writeUInt32(3, dscp_);
+      }
+      if (protocol_ != 0) {
+        output.writeUInt32(4, protocol_);
+      }
+      if (ttl_ != 0) {
+        output.writeUInt32(5, ttl_);
       }
       unknownFields.writeTo(output);
     }
@@ -37442,9 +46997,23 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (connectionUuid_ != null) {
+      if (!getSrcIpAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcIpAddress_);
+      }
+      if (!getDstIpAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dstIpAddress_);
+      }
+      if (dscp_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getConnectionUuid());
+          .computeUInt32Size(3, dscp_);
+      }
+      if (protocol_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(4, protocol_);
+      }
+      if (ttl_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(5, ttl_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -37456,16 +47025,21 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionId)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L3)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionId other = (context.ContextOuterClass.ConnectionId) obj;
+      context.ContextOuterClass.ConnectionSettings_L3 other = (context.ContextOuterClass.ConnectionSettings_L3) obj;
 
-      if (hasConnectionUuid() != other.hasConnectionUuid()) return false;
-      if (hasConnectionUuid()) {
-        if (!getConnectionUuid()
-            .equals(other.getConnectionUuid())) return false;
-      }
+      if (!getSrcIpAddress()
+          .equals(other.getSrcIpAddress())) return false;
+      if (!getDstIpAddress()
+          .equals(other.getDstIpAddress())) return false;
+      if (getDscp()
+          != other.getDscp()) return false;
+      if (getProtocol()
+          != other.getProtocol()) return false;
+      if (getTtl()
+          != other.getTtl()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -37477,78 +47051,84 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasConnectionUuid()) {
-        hash = (37 * hash) + CONNECTION_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionUuid().hashCode();
-      }
+      hash = (37 * hash) + SRC_IP_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getSrcIpAddress().hashCode();
+      hash = (37 * hash) + DST_IP_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getDstIpAddress().hashCode();
+      hash = (37 * hash) + DSCP_FIELD_NUMBER;
+      hash = (53 * hash) + getDscp();
+      hash = (37 * hash) + PROTOCOL_FIELD_NUMBER;
+      hash = (53 * hash) + getProtocol();
+      hash = (37 * hash) + TTL_FIELD_NUMBER;
+      hash = (53 * hash) + getTtl();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -37561,7 +47141,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L3 prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -37577,30 +47157,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Connection ----------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.ConnectionId}
+     * Protobuf type {@code context.ConnectionSettings_L3}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionId)
-        context.ContextOuterClass.ConnectionIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L3)
+        context.ContextOuterClass.ConnectionSettings_L3OrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
+                context.ContextOuterClass.ConnectionSettings_L3.class, context.ContextOuterClass.ConnectionSettings_L3.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionId.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings_L3.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -37618,29 +47194,33 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (connectionUuidBuilder_ == null) {
-          connectionUuid_ = null;
-        } else {
-          connectionUuid_ = null;
-          connectionUuidBuilder_ = null;
-        }
+        srcIpAddress_ = "";
+
+        dstIpAddress_ = "";
+
+        dscp_ = 0;
+
+        protocol_ = 0;
+
+        ttl_ = 0;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionId.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionId build() {
-        context.ContextOuterClass.ConnectionId result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings_L3 build() {
+        context.ContextOuterClass.ConnectionSettings_L3 result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -37648,13 +47228,13 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionId buildPartial() {
-        context.ContextOuterClass.ConnectionId result = new context.ContextOuterClass.ConnectionId(this);
-        if (connectionUuidBuilder_ == null) {
-          result.connectionUuid_ = connectionUuid_;
-        } else {
-          result.connectionUuid_ = connectionUuidBuilder_.build();
-        }
+      public context.ContextOuterClass.ConnectionSettings_L3 buildPartial() {
+        context.ContextOuterClass.ConnectionSettings_L3 result = new context.ContextOuterClass.ConnectionSettings_L3(this);
+        result.srcIpAddress_ = srcIpAddress_;
+        result.dstIpAddress_ = dstIpAddress_;
+        result.dscp_ = dscp_;
+        result.protocol_ = protocol_;
+        result.ttl_ = ttl_;
         onBuilt();
         return result;
       }
@@ -37693,18 +47273,32 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionId) {
-          return mergeFrom((context.ContextOuterClass.ConnectionId)other);
+        if (other instanceof context.ContextOuterClass.ConnectionSettings_L3) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L3)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionId other) {
-        if (other == context.ContextOuterClass.ConnectionId.getDefaultInstance()) return this;
-        if (other.hasConnectionUuid()) {
-          mergeConnectionUuid(other.getConnectionUuid());
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L3 other) {
+        if (other == context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance()) return this;
+        if (!other.getSrcIpAddress().isEmpty()) {
+          srcIpAddress_ = other.srcIpAddress_;
+          onChanged();
+        }
+        if (!other.getDstIpAddress().isEmpty()) {
+          dstIpAddress_ = other.dstIpAddress_;
+          onChanged();
+        }
+        if (other.getDscp() != 0) {
+          setDscp(other.getDscp());
+        }
+        if (other.getProtocol() != 0) {
+          setProtocol(other.getProtocol());
+        }
+        if (other.getTtl() != 0) {
+          setTtl(other.getTtl());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -37721,11 +47315,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionId parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings_L3 parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L3) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -37735,123 +47329,249 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private context.ContextOuterClass.Uuid connectionUuid_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> connectionUuidBuilder_;
+      private java.lang.Object srcIpAddress_ = "";
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
-       * @return Whether the connectionUuid field is set.
+       * <code>string src_ip_address = 1;</code>
+       * @return The srcIpAddress.
        */
-      public boolean hasConnectionUuid() {
-        return connectionUuidBuilder_ != null || connectionUuid_ != null;
+      public java.lang.String getSrcIpAddress() {
+        java.lang.Object ref = srcIpAddress_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          srcIpAddress_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
-       * @return The connectionUuid.
+       * <code>string src_ip_address = 1;</code>
+       * @return The bytes for srcIpAddress.
        */
-      public context.ContextOuterClass.Uuid getConnectionUuid() {
-        if (connectionUuidBuilder_ == null) {
-          return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+      public com.google.protobuf.ByteString
+          getSrcIpAddressBytes() {
+        java.lang.Object ref = srcIpAddress_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          srcIpAddress_ = b;
+          return b;
         } else {
-          return connectionUuidBuilder_.getMessage();
+          return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>string src_ip_address = 1;</code>
+       * @param value The srcIpAddress to set.
+       * @return This builder for chaining.
        */
-      public Builder setConnectionUuid(context.ContextOuterClass.Uuid value) {
-        if (connectionUuidBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          connectionUuid_ = value;
-          onChanged();
-        } else {
-          connectionUuidBuilder_.setMessage(value);
-        }
-
+      public Builder setSrcIpAddress(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        srcIpAddress_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>string src_ip_address = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder setConnectionUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (connectionUuidBuilder_ == null) {
-          connectionUuid_ = builderForValue.build();
-          onChanged();
+      public Builder clearSrcIpAddress() {
+        
+        srcIpAddress_ = getDefaultInstance().getSrcIpAddress();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string src_ip_address = 1;</code>
+       * @param value The bytes for srcIpAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSrcIpAddressBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        srcIpAddress_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object dstIpAddress_ = "";
+      /**
+       * <code>string dst_ip_address = 2;</code>
+       * @return The dstIpAddress.
+       */
+      public java.lang.String getDstIpAddress() {
+        java.lang.Object ref = dstIpAddress_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          dstIpAddress_ = s;
+          return s;
         } else {
-          connectionUuidBuilder_.setMessage(builderForValue.build());
+          return (java.lang.String) ref;
         }
-
-        return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>string dst_ip_address = 2;</code>
+       * @return The bytes for dstIpAddress.
        */
-      public Builder mergeConnectionUuid(context.ContextOuterClass.Uuid value) {
-        if (connectionUuidBuilder_ == null) {
-          if (connectionUuid_ != null) {
-            connectionUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(connectionUuid_).mergeFrom(value).buildPartial();
-          } else {
-            connectionUuid_ = value;
-          }
-          onChanged();
+      public com.google.protobuf.ByteString
+          getDstIpAddressBytes() {
+        java.lang.Object ref = dstIpAddress_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          dstIpAddress_ = b;
+          return b;
         } else {
-          connectionUuidBuilder_.mergeFrom(value);
+          return (com.google.protobuf.ByteString) ref;
         }
+      }
+      /**
+       * <code>string dst_ip_address = 2;</code>
+       * @param value The dstIpAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDstIpAddress(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        dstIpAddress_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string dst_ip_address = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDstIpAddress() {
+        
+        dstIpAddress_ = getDefaultInstance().getDstIpAddress();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string dst_ip_address = 2;</code>
+       * @param value The bytes for dstIpAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDstIpAddressBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        dstIpAddress_ = value;
+        onChanged();
+        return this;
+      }
 
+      private int dscp_ ;
+      /**
+       * <code>uint32 dscp = 3;</code>
+       * @return The dscp.
+       */
+      @java.lang.Override
+      public int getDscp() {
+        return dscp_;
+      }
+      /**
+       * <code>uint32 dscp = 3;</code>
+       * @param value The dscp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDscp(int value) {
+        
+        dscp_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>uint32 dscp = 3;</code>
+       * @return This builder for chaining.
        */
-      public Builder clearConnectionUuid() {
-        if (connectionUuidBuilder_ == null) {
-          connectionUuid_ = null;
-          onChanged();
-        } else {
-          connectionUuid_ = null;
-          connectionUuidBuilder_ = null;
-        }
+      public Builder clearDscp() {
+        
+        dscp_ = 0;
+        onChanged();
+        return this;
+      }
 
+      private int protocol_ ;
+      /**
+       * <code>uint32 protocol = 4;</code>
+       * @return The protocol.
+       */
+      @java.lang.Override
+      public int getProtocol() {
+        return protocol_;
+      }
+      /**
+       * <code>uint32 protocol = 4;</code>
+       * @param value The protocol to set.
+       * @return This builder for chaining.
+       */
+      public Builder setProtocol(int value) {
+        
+        protocol_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>uint32 protocol = 4;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Uuid.Builder getConnectionUuidBuilder() {
+      public Builder clearProtocol() {
         
+        protocol_ = 0;
         onChanged();
-        return getConnectionUuidFieldBuilder().getBuilder();
+        return this;
       }
+
+      private int ttl_ ;
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>uint32 ttl = 5;</code>
+       * @return The ttl.
        */
-      public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
-        if (connectionUuidBuilder_ != null) {
-          return connectionUuidBuilder_.getMessageOrBuilder();
-        } else {
-          return connectionUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
-        }
+      @java.lang.Override
+      public int getTtl() {
+        return ttl_;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>uint32 ttl = 5;</code>
+       * @param value The ttl to set.
+       * @return This builder for chaining.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getConnectionUuidFieldBuilder() {
-        if (connectionUuidBuilder_ == null) {
-          connectionUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getConnectionUuid(),
-                  getParentForChildren(),
-                  isClean());
-          connectionUuid_ = null;
-        }
-        return connectionUuidBuilder_;
+      public Builder setTtl(int value) {
+        
+        ttl_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 ttl = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearTtl() {
+        
+        ttl_ = 0;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -37866,83 +47586,94 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionId)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L3)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionId)
-    private static final context.ContextOuterClass.ConnectionId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L3)
+    private static final context.ContextOuterClass.ConnectionSettings_L3 DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L3();
     }
 
-    public static context.ContextOuterClass.ConnectionId getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionId>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionId>() {
+    private static final com.google.protobuf.Parser<ConnectionSettings_L3>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L3>() {
       @java.lang.Override
-      public ConnectionId parsePartialFrom(
+      public ConnectionSettings_L3 parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionId(input, extensionRegistry);
+        return new ConnectionSettings_L3(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionId> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings_L3> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionId> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings_L3> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionSettings_L0OrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L0)
+  public interface ConnectionSettings_L4OrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L4)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string lsp_symbolic_name = 1;</code>
-     * @return The lspSymbolicName.
+     * <code>uint32 src_port = 1;</code>
+     * @return The srcPort.
      */
-    java.lang.String getLspSymbolicName();
+    int getSrcPort();
+
     /**
-     * <code>string lsp_symbolic_name = 1;</code>
-     * @return The bytes for lspSymbolicName.
+     * <code>uint32 dst_port = 2;</code>
+     * @return The dstPort.
      */
-    com.google.protobuf.ByteString
-        getLspSymbolicNameBytes();
+    int getDstPort();
+
+    /**
+     * <code>uint32 tcp_flags = 3;</code>
+     * @return The tcpFlags.
+     */
+    int getTcpFlags();
+
+    /**
+     * <code>uint32 ttl = 4;</code>
+     * @return The ttl.
+     */
+    int getTtl();
   }
   /**
-   * Protobuf type {@code context.ConnectionSettings_L0}
+   * Protobuf type {@code context.ConnectionSettings_L4}
    */
-  public static final class ConnectionSettings_L0 extends
+  public static final class ConnectionSettings_L4 extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L0)
-      ConnectionSettings_L0OrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L4)
+      ConnectionSettings_L4OrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionSettings_L0.newBuilder() to construct.
-    private ConnectionSettings_L0(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings_L4.newBuilder() to construct.
+    private ConnectionSettings_L4(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionSettings_L0() {
-      lspSymbolicName_ = "";
+    private ConnectionSettings_L4() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionSettings_L0();
+      return new ConnectionSettings_L4();
     }
 
     @java.lang.Override
@@ -37950,7 +47681,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionSettings_L0(
+    private ConnectionSettings_L4(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -37968,10 +47699,24 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
+            case 8: {
 
-              lspSymbolicName_ = s;
+              srcPort_ = input.readUInt32();
+              break;
+            }
+            case 16: {
+
+              dstPort_ = input.readUInt32();
+              break;
+            }
+            case 24: {
+
+              tcpFlags_ = input.readUInt32();
+              break;
+            }
+            case 32: {
+
+              ttl_ = input.readUInt32();
               break;
             }
             default: {
@@ -37995,53 +47740,59 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionSettings_L0.class, context.ContextOuterClass.ConnectionSettings_L0.Builder.class);
+              context.ContextOuterClass.ConnectionSettings_L4.class, context.ContextOuterClass.ConnectionSettings_L4.Builder.class);
     }
 
-    public static final int LSP_SYMBOLIC_NAME_FIELD_NUMBER = 1;
-    private volatile java.lang.Object lspSymbolicName_;
+    public static final int SRC_PORT_FIELD_NUMBER = 1;
+    private int srcPort_;
     /**
-     * <code>string lsp_symbolic_name = 1;</code>
-     * @return The lspSymbolicName.
+     * <code>uint32 src_port = 1;</code>
+     * @return The srcPort.
      */
     @java.lang.Override
-    public java.lang.String getLspSymbolicName() {
-      java.lang.Object ref = lspSymbolicName_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        lspSymbolicName_ = s;
-        return s;
-      }
+    public int getSrcPort() {
+      return srcPort_;
     }
+
+    public static final int DST_PORT_FIELD_NUMBER = 2;
+    private int dstPort_;
     /**
-     * <code>string lsp_symbolic_name = 1;</code>
-     * @return The bytes for lspSymbolicName.
+     * <code>uint32 dst_port = 2;</code>
+     * @return The dstPort.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getLspSymbolicNameBytes() {
-      java.lang.Object ref = lspSymbolicName_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        lspSymbolicName_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public int getDstPort() {
+      return dstPort_;
+    }
+
+    public static final int TCP_FLAGS_FIELD_NUMBER = 3;
+    private int tcpFlags_;
+    /**
+     * <code>uint32 tcp_flags = 3;</code>
+     * @return The tcpFlags.
+     */
+    @java.lang.Override
+    public int getTcpFlags() {
+      return tcpFlags_;
+    }
+
+    public static final int TTL_FIELD_NUMBER = 4;
+    private int ttl_;
+    /**
+     * <code>uint32 ttl = 4;</code>
+     * @return The ttl.
+     */
+    @java.lang.Override
+    public int getTtl() {
+      return ttl_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -38058,8 +47809,17 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (!getLspSymbolicNameBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, lspSymbolicName_);
+      if (srcPort_ != 0) {
+        output.writeUInt32(1, srcPort_);
+      }
+      if (dstPort_ != 0) {
+        output.writeUInt32(2, dstPort_);
+      }
+      if (tcpFlags_ != 0) {
+        output.writeUInt32(3, tcpFlags_);
+      }
+      if (ttl_ != 0) {
+        output.writeUInt32(4, ttl_);
       }
       unknownFields.writeTo(output);
     }
@@ -38070,8 +47830,21 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (!getLspSymbolicNameBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, lspSymbolicName_);
+      if (srcPort_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(1, srcPort_);
+      }
+      if (dstPort_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(2, dstPort_);
+      }
+      if (tcpFlags_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(3, tcpFlags_);
+      }
+      if (ttl_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(4, ttl_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -38083,13 +47856,19 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L0)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L4)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionSettings_L0 other = (context.ContextOuterClass.ConnectionSettings_L0) obj;
+      context.ContextOuterClass.ConnectionSettings_L4 other = (context.ContextOuterClass.ConnectionSettings_L4) obj;
 
-      if (!getLspSymbolicName()
-          .equals(other.getLspSymbolicName())) return false;
+      if (getSrcPort()
+          != other.getSrcPort()) return false;
+      if (getDstPort()
+          != other.getDstPort()) return false;
+      if (getTcpFlags()
+          != other.getTcpFlags()) return false;
+      if (getTtl()
+          != other.getTtl()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -38101,76 +47880,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + LSP_SYMBOLIC_NAME_FIELD_NUMBER;
-      hash = (53 * hash) + getLspSymbolicName().hashCode();
+      hash = (37 * hash) + SRC_PORT_FIELD_NUMBER;
+      hash = (53 * hash) + getSrcPort();
+      hash = (37 * hash) + DST_PORT_FIELD_NUMBER;
+      hash = (53 * hash) + getDstPort();
+      hash = (37 * hash) + TCP_FLAGS_FIELD_NUMBER;
+      hash = (53 * hash) + getTcpFlags();
+      hash = (37 * hash) + TTL_FIELD_NUMBER;
+      hash = (53 * hash) + getTtl();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -38183,7 +47968,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L0 prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L4 prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -38199,26 +47984,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionSettings_L0}
+     * Protobuf type {@code context.ConnectionSettings_L4}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L0)
-        context.ContextOuterClass.ConnectionSettings_L0OrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L4)
+        context.ContextOuterClass.ConnectionSettings_L4OrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionSettings_L0.class, context.ContextOuterClass.ConnectionSettings_L0.Builder.class);
+                context.ContextOuterClass.ConnectionSettings_L4.class, context.ContextOuterClass.ConnectionSettings_L4.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionSettings_L0.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings_L4.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -38236,7 +48021,13 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        lspSymbolicName_ = "";
+        srcPort_ = 0;
+
+        dstPort_ = 0;
+
+        tcpFlags_ = 0;
+
+        ttl_ = 0;
 
         return this;
       }
@@ -38244,17 +48035,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L0 build() {
-        context.ContextOuterClass.ConnectionSettings_L0 result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings_L4 build() {
+        context.ContextOuterClass.ConnectionSettings_L4 result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -38262,9 +48053,12 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L0 buildPartial() {
-        context.ContextOuterClass.ConnectionSettings_L0 result = new context.ContextOuterClass.ConnectionSettings_L0(this);
-        result.lspSymbolicName_ = lspSymbolicName_;
+      public context.ContextOuterClass.ConnectionSettings_L4 buildPartial() {
+        context.ContextOuterClass.ConnectionSettings_L4 result = new context.ContextOuterClass.ConnectionSettings_L4(this);
+        result.srcPort_ = srcPort_;
+        result.dstPort_ = dstPort_;
+        result.tcpFlags_ = tcpFlags_;
+        result.ttl_ = ttl_;
         onBuilt();
         return result;
       }
@@ -38303,19 +48097,27 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionSettings_L0) {
-          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L0)other);
+        if (other instanceof context.ContextOuterClass.ConnectionSettings_L4) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L4)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L0 other) {
-        if (other == context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance()) return this;
-        if (!other.getLspSymbolicName().isEmpty()) {
-          lspSymbolicName_ = other.lspSymbolicName_;
-          onChanged();
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L4 other) {
+        if (other == context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance()) return this;
+        if (other.getSrcPort() != 0) {
+          setSrcPort(other.getSrcPort());
+        }
+        if (other.getDstPort() != 0) {
+          setDstPort(other.getDstPort());
+        }
+        if (other.getTcpFlags() != 0) {
+          setTcpFlags(other.getTcpFlags());
+        }
+        if (other.getTtl() != 0) {
+          setTtl(other.getTtl());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -38332,11 +48134,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionSettings_L0 parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings_L4 parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L0) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L4) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -38346,78 +48148,126 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private java.lang.Object lspSymbolicName_ = "";
+      private int srcPort_ ;
       /**
-       * <code>string lsp_symbolic_name = 1;</code>
-       * @return The lspSymbolicName.
+       * <code>uint32 src_port = 1;</code>
+       * @return The srcPort.
        */
-      public java.lang.String getLspSymbolicName() {
-        java.lang.Object ref = lspSymbolicName_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          lspSymbolicName_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
+      @java.lang.Override
+      public int getSrcPort() {
+        return srcPort_;
       }
       /**
-       * <code>string lsp_symbolic_name = 1;</code>
-       * @return The bytes for lspSymbolicName.
+       * <code>uint32 src_port = 1;</code>
+       * @param value The srcPort to set.
+       * @return This builder for chaining.
        */
-      public com.google.protobuf.ByteString
-          getLspSymbolicNameBytes() {
-        java.lang.Object ref = lspSymbolicName_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          lspSymbolicName_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
+      public Builder setSrcPort(int value) {
+        
+        srcPort_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>string lsp_symbolic_name = 1;</code>
-       * @param value The lspSymbolicName to set.
+       * <code>uint32 src_port = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder setLspSymbolicName(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        lspSymbolicName_ = value;
+      public Builder clearSrcPort() {
+        
+        srcPort_ = 0;
         onChanged();
         return this;
       }
+
+      private int dstPort_ ;
       /**
-       * <code>string lsp_symbolic_name = 1;</code>
+       * <code>uint32 dst_port = 2;</code>
+       * @return The dstPort.
+       */
+      @java.lang.Override
+      public int getDstPort() {
+        return dstPort_;
+      }
+      /**
+       * <code>uint32 dst_port = 2;</code>
+       * @param value The dstPort to set.
        * @return This builder for chaining.
        */
-      public Builder clearLspSymbolicName() {
+      public Builder setDstPort(int value) {
         
-        lspSymbolicName_ = getDefaultInstance().getLspSymbolicName();
+        dstPort_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>string lsp_symbolic_name = 1;</code>
-       * @param value The bytes for lspSymbolicName to set.
+       * <code>uint32 dst_port = 2;</code>
        * @return This builder for chaining.
        */
-      public Builder setLspSymbolicNameBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
+      public Builder clearDstPort() {
         
-        lspSymbolicName_ = value;
+        dstPort_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int tcpFlags_ ;
+      /**
+       * <code>uint32 tcp_flags = 3;</code>
+       * @return The tcpFlags.
+       */
+      @java.lang.Override
+      public int getTcpFlags() {
+        return tcpFlags_;
+      }
+      /**
+       * <code>uint32 tcp_flags = 3;</code>
+       * @param value The tcpFlags to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTcpFlags(int value) {
+        
+        tcpFlags_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 tcp_flags = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearTcpFlags() {
+        
+        tcpFlags_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int ttl_ ;
+      /**
+       * <code>uint32 ttl = 4;</code>
+       * @return The ttl.
+       */
+      @java.lang.Override
+      public int getTtl() {
+        return ttl_;
+      }
+      /**
+       * <code>uint32 ttl = 4;</code>
+       * @param value The ttl to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTtl(int value) {
+        
+        ttl_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 ttl = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearTtl() {
+        
+        ttl_ = 0;
         onChanged();
         return this;
       }
@@ -38434,120 +48284,130 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L0)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L4)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L0)
-    private static final context.ContextOuterClass.ConnectionSettings_L0 DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L4)
+    private static final context.ContextOuterClass.ConnectionSettings_L4 DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L0();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L4();
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionSettings_L0>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L0>() {
+    private static final com.google.protobuf.Parser<ConnectionSettings_L4>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L4>() {
       @java.lang.Override
-      public ConnectionSettings_L0 parsePartialFrom(
+      public ConnectionSettings_L4 parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionSettings_L0(input, extensionRegistry);
+        return new ConnectionSettings_L4(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionSettings_L0> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings_L4> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionSettings_L0> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings_L4> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionSettings_L2OrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L2)
+  public interface ConnectionSettingsOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string src_mac_address = 1;</code>
-     * @return The srcMacAddress.
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * @return Whether the l0 field is set.
      */
-    java.lang.String getSrcMacAddress();
+    boolean hasL0();
     /**
-     * <code>string src_mac_address = 1;</code>
-     * @return The bytes for srcMacAddress.
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * @return The l0.
      */
-    com.google.protobuf.ByteString
-        getSrcMacAddressBytes();
+    context.ContextOuterClass.ConnectionSettings_L0 getL0();
+    /**
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     */
+    context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder();
 
     /**
-     * <code>string dst_mac_address = 2;</code>
-     * @return The dstMacAddress.
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * @return Whether the l2 field is set.
      */
-    java.lang.String getDstMacAddress();
+    boolean hasL2();
     /**
-     * <code>string dst_mac_address = 2;</code>
-     * @return The bytes for dstMacAddress.
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * @return The l2.
      */
-    com.google.protobuf.ByteString
-        getDstMacAddressBytes();
-
+    context.ContextOuterClass.ConnectionSettings_L2 getL2();
     /**
-     * <code>uint32 ether_type = 3;</code>
-     * @return The etherType.
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
      */
-    int getEtherType();
+    context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder();
 
     /**
-     * <code>uint32 vlan_id = 4;</code>
-     * @return The vlanId.
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * @return Whether the l3 field is set.
      */
-    int getVlanId();
-
+    boolean hasL3();
     /**
-     * <code>uint32 mpls_label = 5;</code>
-     * @return The mplsLabel.
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * @return The l3.
      */
-    int getMplsLabel();
+    context.ContextOuterClass.ConnectionSettings_L3 getL3();
+    /**
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     */
+    context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder();
 
     /**
-     * <code>uint32 mpls_traffic_class = 6;</code>
-     * @return The mplsTrafficClass.
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * @return Whether the l4 field is set.
      */
-    int getMplsTrafficClass();
+    boolean hasL4();
+    /**
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * @return The l4.
+     */
+    context.ContextOuterClass.ConnectionSettings_L4 getL4();
+    /**
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     */
+    context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder();
   }
   /**
-   * Protobuf type {@code context.ConnectionSettings_L2}
+   * Protobuf type {@code context.ConnectionSettings}
    */
-  public static final class ConnectionSettings_L2 extends
+  public static final class ConnectionSettings extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L2)
-      ConnectionSettings_L2OrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings)
+      ConnectionSettingsOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionSettings_L2.newBuilder() to construct.
-    private ConnectionSettings_L2(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings.newBuilder() to construct.
+    private ConnectionSettings(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionSettings_L2() {
-      srcMacAddress_ = "";
-      dstMacAddress_ = "";
+    private ConnectionSettings() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionSettings_L2();
+      return new ConnectionSettings();
     }
 
     @java.lang.Override
@@ -38555,7 +48415,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionSettings_L2(
+    private ConnectionSettings(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -38574,35 +48434,55 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
+              context.ContextOuterClass.ConnectionSettings_L0.Builder subBuilder = null;
+              if (l0_ != null) {
+                subBuilder = l0_.toBuilder();
+              }
+              l0_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L0.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(l0_);
+                l0_ = subBuilder.buildPartial();
+              }
 
-              srcMacAddress_ = s;
               break;
             }
             case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              dstMacAddress_ = s;
-              break;
-            }
-            case 24: {
-
-              etherType_ = input.readUInt32();
-              break;
-            }
-            case 32: {
+              context.ContextOuterClass.ConnectionSettings_L2.Builder subBuilder = null;
+              if (l2_ != null) {
+                subBuilder = l2_.toBuilder();
+              }
+              l2_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L2.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(l2_);
+                l2_ = subBuilder.buildPartial();
+              }
 
-              vlanId_ = input.readUInt32();
               break;
             }
-            case 40: {
+            case 26: {
+              context.ContextOuterClass.ConnectionSettings_L3.Builder subBuilder = null;
+              if (l3_ != null) {
+                subBuilder = l3_.toBuilder();
+              }
+              l3_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L3.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(l3_);
+                l3_ = subBuilder.buildPartial();
+              }
 
-              mplsLabel_ = input.readUInt32();
               break;
             }
-            case 48: {
+            case 34: {
+              context.ContextOuterClass.ConnectionSettings_L4.Builder subBuilder = null;
+              if (l4_ != null) {
+                subBuilder = l4_.toBuilder();
+              }
+              l4_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L4.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(l4_);
+                l4_ = subBuilder.buildPartial();
+              }
 
-              mplsTrafficClass_ = input.readUInt32();
               break;
             }
             default: {
@@ -38626,135 +48506,119 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionSettings_L2.class, context.ContextOuterClass.ConnectionSettings_L2.Builder.class);
+              context.ContextOuterClass.ConnectionSettings.class, context.ContextOuterClass.ConnectionSettings.Builder.class);
+    }
+
+    public static final int L0_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ConnectionSettings_L0 l0_;
+    /**
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * @return Whether the l0 field is set.
+     */
+    @java.lang.Override
+    public boolean hasL0() {
+      return l0_ != null;
+    }
+    /**
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * @return The l0.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionSettings_L0 getL0() {
+      return l0_ == null ? context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
+    }
+    /**
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder() {
+      return getL0();
+    }
+
+    public static final int L2_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ConnectionSettings_L2 l2_;
+    /**
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * @return Whether the l2 field is set.
+     */
+    @java.lang.Override
+    public boolean hasL2() {
+      return l2_ != null;
     }
-
-    public static final int SRC_MAC_ADDRESS_FIELD_NUMBER = 1;
-    private volatile java.lang.Object srcMacAddress_;
     /**
-     * <code>string src_mac_address = 1;</code>
-     * @return The srcMacAddress.
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * @return The l2.
      */
     @java.lang.Override
-    public java.lang.String getSrcMacAddress() {
-      java.lang.Object ref = srcMacAddress_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        srcMacAddress_ = s;
-        return s;
-      }
+    public context.ContextOuterClass.ConnectionSettings_L2 getL2() {
+      return l2_ == null ? context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
     }
     /**
-     * <code>string src_mac_address = 1;</code>
-     * @return The bytes for srcMacAddress.
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getSrcMacAddressBytes() {
-      java.lang.Object ref = srcMacAddress_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        srcMacAddress_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder() {
+      return getL2();
     }
 
-    public static final int DST_MAC_ADDRESS_FIELD_NUMBER = 2;
-    private volatile java.lang.Object dstMacAddress_;
+    public static final int L3_FIELD_NUMBER = 3;
+    private context.ContextOuterClass.ConnectionSettings_L3 l3_;
     /**
-     * <code>string dst_mac_address = 2;</code>
-     * @return The dstMacAddress.
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * @return Whether the l3 field is set.
      */
     @java.lang.Override
-    public java.lang.String getDstMacAddress() {
-      java.lang.Object ref = dstMacAddress_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        dstMacAddress_ = s;
-        return s;
-      }
+    public boolean hasL3() {
+      return l3_ != null;
     }
     /**
-     * <code>string dst_mac_address = 2;</code>
-     * @return The bytes for dstMacAddress.
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * @return The l3.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getDstMacAddressBytes() {
-      java.lang.Object ref = dstMacAddress_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        dstMacAddress_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public context.ContextOuterClass.ConnectionSettings_L3 getL3() {
+      return l3_ == null ? context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
     }
-
-    public static final int ETHER_TYPE_FIELD_NUMBER = 3;
-    private int etherType_;
     /**
-     * <code>uint32 ether_type = 3;</code>
-     * @return The etherType.
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
      */
     @java.lang.Override
-    public int getEtherType() {
-      return etherType_;
+    public context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder() {
+      return getL3();
     }
 
-    public static final int VLAN_ID_FIELD_NUMBER = 4;
-    private int vlanId_;
+    public static final int L4_FIELD_NUMBER = 4;
+    private context.ContextOuterClass.ConnectionSettings_L4 l4_;
     /**
-     * <code>uint32 vlan_id = 4;</code>
-     * @return The vlanId.
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * @return Whether the l4 field is set.
      */
     @java.lang.Override
-    public int getVlanId() {
-      return vlanId_;
+    public boolean hasL4() {
+      return l4_ != null;
     }
-
-    public static final int MPLS_LABEL_FIELD_NUMBER = 5;
-    private int mplsLabel_;
     /**
-     * <code>uint32 mpls_label = 5;</code>
-     * @return The mplsLabel.
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * @return The l4.
      */
     @java.lang.Override
-    public int getMplsLabel() {
-      return mplsLabel_;
+    public context.ContextOuterClass.ConnectionSettings_L4 getL4() {
+      return l4_ == null ? context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
     }
-
-    public static final int MPLS_TRAFFIC_CLASS_FIELD_NUMBER = 6;
-    private int mplsTrafficClass_;
     /**
-     * <code>uint32 mpls_traffic_class = 6;</code>
-     * @return The mplsTrafficClass.
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
      */
     @java.lang.Override
-    public int getMplsTrafficClass() {
-      return mplsTrafficClass_;
+    public context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder() {
+      return getL4();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -38771,23 +48635,17 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (!getSrcMacAddressBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcMacAddress_);
-      }
-      if (!getDstMacAddressBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dstMacAddress_);
-      }
-      if (etherType_ != 0) {
-        output.writeUInt32(3, etherType_);
+      if (l0_ != null) {
+        output.writeMessage(1, getL0());
       }
-      if (vlanId_ != 0) {
-        output.writeUInt32(4, vlanId_);
+      if (l2_ != null) {
+        output.writeMessage(2, getL2());
       }
-      if (mplsLabel_ != 0) {
-        output.writeUInt32(5, mplsLabel_);
+      if (l3_ != null) {
+        output.writeMessage(3, getL3());
       }
-      if (mplsTrafficClass_ != 0) {
-        output.writeUInt32(6, mplsTrafficClass_);
+      if (l4_ != null) {
+        output.writeMessage(4, getL4());
       }
       unknownFields.writeTo(output);
     }
@@ -38798,27 +48656,21 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (!getSrcMacAddressBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcMacAddress_);
-      }
-      if (!getDstMacAddressBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dstMacAddress_);
-      }
-      if (etherType_ != 0) {
+      if (l0_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(3, etherType_);
+          .computeMessageSize(1, getL0());
       }
-      if (vlanId_ != 0) {
+      if (l2_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(4, vlanId_);
+          .computeMessageSize(2, getL2());
       }
-      if (mplsLabel_ != 0) {
+      if (l3_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(5, mplsLabel_);
+          .computeMessageSize(3, getL3());
       }
-      if (mplsTrafficClass_ != 0) {
+      if (l4_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(6, mplsTrafficClass_);
+          .computeMessageSize(4, getL4());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -38830,23 +48682,31 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L2)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionSettings_L2 other = (context.ContextOuterClass.ConnectionSettings_L2) obj;
+      context.ContextOuterClass.ConnectionSettings other = (context.ContextOuterClass.ConnectionSettings) obj;
 
-      if (!getSrcMacAddress()
-          .equals(other.getSrcMacAddress())) return false;
-      if (!getDstMacAddress()
-          .equals(other.getDstMacAddress())) return false;
-      if (getEtherType()
-          != other.getEtherType()) return false;
-      if (getVlanId()
-          != other.getVlanId()) return false;
-      if (getMplsLabel()
-          != other.getMplsLabel()) return false;
-      if (getMplsTrafficClass()
-          != other.getMplsTrafficClass()) return false;
+      if (hasL0() != other.hasL0()) return false;
+      if (hasL0()) {
+        if (!getL0()
+            .equals(other.getL0())) return false;
+      }
+      if (hasL2() != other.hasL2()) return false;
+      if (hasL2()) {
+        if (!getL2()
+            .equals(other.getL2())) return false;
+      }
+      if (hasL3() != other.hasL3()) return false;
+      if (hasL3()) {
+        if (!getL3()
+            .equals(other.getL3())) return false;
+      }
+      if (hasL4() != other.hasL4()) return false;
+      if (hasL4()) {
+        if (!getL4()
+            .equals(other.getL4())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -38858,86 +48718,90 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + SRC_MAC_ADDRESS_FIELD_NUMBER;
-      hash = (53 * hash) + getSrcMacAddress().hashCode();
-      hash = (37 * hash) + DST_MAC_ADDRESS_FIELD_NUMBER;
-      hash = (53 * hash) + getDstMacAddress().hashCode();
-      hash = (37 * hash) + ETHER_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + getEtherType();
-      hash = (37 * hash) + VLAN_ID_FIELD_NUMBER;
-      hash = (53 * hash) + getVlanId();
-      hash = (37 * hash) + MPLS_LABEL_FIELD_NUMBER;
-      hash = (53 * hash) + getMplsLabel();
-      hash = (37 * hash) + MPLS_TRAFFIC_CLASS_FIELD_NUMBER;
-      hash = (53 * hash) + getMplsTrafficClass();
+      if (hasL0()) {
+        hash = (37 * hash) + L0_FIELD_NUMBER;
+        hash = (53 * hash) + getL0().hashCode();
+      }
+      if (hasL2()) {
+        hash = (37 * hash) + L2_FIELD_NUMBER;
+        hash = (53 * hash) + getL2().hashCode();
+      }
+      if (hasL3()) {
+        hash = (37 * hash) + L3_FIELD_NUMBER;
+        hash = (53 * hash) + getL3().hashCode();
+      }
+      if (hasL4()) {
+        hash = (37 * hash) + L4_FIELD_NUMBER;
+        hash = (53 * hash) + getL4().hashCode();
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -38950,7 +48814,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L2 prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -38966,26 +48830,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionSettings_L2}
+     * Protobuf type {@code context.ConnectionSettings}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L2)
-        context.ContextOuterClass.ConnectionSettings_L2OrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings)
+        context.ContextOuterClass.ConnectionSettingsOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionSettings_L2.class, context.ContextOuterClass.ConnectionSettings_L2.Builder.class);
+                context.ContextOuterClass.ConnectionSettings.class, context.ContextOuterClass.ConnectionSettings.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionSettings_L2.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -39003,35 +48867,47 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        srcMacAddress_ = "";
-
-        dstMacAddress_ = "";
-
-        etherType_ = 0;
-
-        vlanId_ = 0;
-
-        mplsLabel_ = 0;
-
-        mplsTrafficClass_ = 0;
-
+        if (l0Builder_ == null) {
+          l0_ = null;
+        } else {
+          l0_ = null;
+          l0Builder_ = null;
+        }
+        if (l2Builder_ == null) {
+          l2_ = null;
+        } else {
+          l2_ = null;
+          l2Builder_ = null;
+        }
+        if (l3Builder_ == null) {
+          l3_ = null;
+        } else {
+          l3_ = null;
+          l3Builder_ = null;
+        }
+        if (l4Builder_ == null) {
+          l4_ = null;
+        } else {
+          l4_ = null;
+          l4Builder_ = null;
+        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L2 build() {
-        context.ContextOuterClass.ConnectionSettings_L2 result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings build() {
+        context.ContextOuterClass.ConnectionSettings result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -39039,14 +48915,28 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L2 buildPartial() {
-        context.ContextOuterClass.ConnectionSettings_L2 result = new context.ContextOuterClass.ConnectionSettings_L2(this);
-        result.srcMacAddress_ = srcMacAddress_;
-        result.dstMacAddress_ = dstMacAddress_;
-        result.etherType_ = etherType_;
-        result.vlanId_ = vlanId_;
-        result.mplsLabel_ = mplsLabel_;
-        result.mplsTrafficClass_ = mplsTrafficClass_;
+      public context.ContextOuterClass.ConnectionSettings buildPartial() {
+        context.ContextOuterClass.ConnectionSettings result = new context.ContextOuterClass.ConnectionSettings(this);
+        if (l0Builder_ == null) {
+          result.l0_ = l0_;
+        } else {
+          result.l0_ = l0Builder_.build();
+        }
+        if (l2Builder_ == null) {
+          result.l2_ = l2_;
+        } else {
+          result.l2_ = l2Builder_.build();
+        }
+        if (l3Builder_ == null) {
+          result.l3_ = l3_;
+        } else {
+          result.l3_ = l3Builder_.build();
+        }
+        if (l4Builder_ == null) {
+          result.l4_ = l4_;
+        } else {
+          result.l4_ = l4Builder_.build();
+        }
         onBuilt();
         return result;
       }
@@ -39077,43 +48967,216 @@ public final class ContextOuterClass {
           int index, java.lang.Object value) {
         return super.setRepeatedField(field, index, value);
       }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ConnectionSettings) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings other) {
+        if (other == context.ContextOuterClass.ConnectionSettings.getDefaultInstance()) return this;
+        if (other.hasL0()) {
+          mergeL0(other.getL0());
+        }
+        if (other.hasL2()) {
+          mergeL2(other.getL2());
+        }
+        if (other.hasL3()) {
+          mergeL3(other.getL3());
+        }
+        if (other.hasL4()) {
+          mergeL4(other.getL4());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ConnectionSettings parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.ConnectionSettings_L0 l0_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder> l0Builder_;
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * @return Whether the l0 field is set.
+       */
+      public boolean hasL0() {
+        return l0Builder_ != null || l0_ != null;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * @return The l0.
+       */
+      public context.ContextOuterClass.ConnectionSettings_L0 getL0() {
+        if (l0Builder_ == null) {
+          return l0_ == null ? context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
+        } else {
+          return l0Builder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       */
+      public Builder setL0(context.ContextOuterClass.ConnectionSettings_L0 value) {
+        if (l0Builder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          l0_ = value;
+          onChanged();
+        } else {
+          l0Builder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       */
+      public Builder setL0(
+          context.ContextOuterClass.ConnectionSettings_L0.Builder builderForValue) {
+        if (l0Builder_ == null) {
+          l0_ = builderForValue.build();
+          onChanged();
+        } else {
+          l0Builder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       */
+      public Builder mergeL0(context.ContextOuterClass.ConnectionSettings_L0 value) {
+        if (l0Builder_ == null) {
+          if (l0_ != null) {
+            l0_ =
+              context.ContextOuterClass.ConnectionSettings_L0.newBuilder(l0_).mergeFrom(value).buildPartial();
+          } else {
+            l0_ = value;
+          }
+          onChanged();
+        } else {
+          l0Builder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       */
+      public Builder clearL0() {
+        if (l0Builder_ == null) {
+          l0_ = null;
+          onChanged();
+        } else {
+          l0_ = null;
+          l0Builder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettings_L0.Builder getL0Builder() {
+        
+        onChanged();
+        return getL0FieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder() {
+        if (l0Builder_ != null) {
+          return l0Builder_.getMessageOrBuilder();
+        } else {
+          return l0_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
+        }
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder> 
+          getL0FieldBuilder() {
+        if (l0Builder_ == null) {
+          l0Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder>(
+                  getL0(),
+                  getParentForChildren(),
+                  isClean());
+          l0_ = null;
+        }
+        return l0Builder_;
+      }
+
+      private context.ContextOuterClass.ConnectionSettings_L2 l2_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder> l2Builder_;
+      /**
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * @return Whether the l2 field is set.
+       */
+      public boolean hasL2() {
+        return l2Builder_ != null || l2_ != null;
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionSettings_L2) {
-          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L2)other);
+        if (other instanceof context.ContextOuterClass.ConnectionSettings) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings)other);
         } else {
-          super.mergeFrom(other);
-          return this;
+          return l2Builder_.getMessage();
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L2 other) {
-        if (other == context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance()) return this;
-        if (!other.getSrcMacAddress().isEmpty()) {
-          srcMacAddress_ = other.srcMacAddress_;
-          onChanged();
-        }
-        if (!other.getDstMacAddress().isEmpty()) {
-          dstMacAddress_ = other.dstMacAddress_;
-          onChanged();
-        }
-        if (other.getEtherType() != 0) {
-          setEtherType(other.getEtherType());
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings other) {
+        if (other == context.ContextOuterClass.ConnectionSettings.getDefaultInstance()) return this;
+        if (other.hasL0()) {
+          mergeL0(other.getL0());
         }
-        if (other.getVlanId() != 0) {
-          setVlanId(other.getVlanId());
+        if (other.hasL2()) {
+          mergeL2(other.getL2());
         }
-        if (other.getMplsLabel() != 0) {
-          setMplsLabel(other.getMplsLabel());
+        if (other.hasL3()) {
+          mergeL3(other.getL3());
         }
-        if (other.getMplsTrafficClass() != 0) {
-          setMplsTrafficClass(other.getMplsTrafficClass());
+        if (other.hasL4()) {
+          mergeL4(other.getL4());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -39130,11 +49193,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionSettings_L2 parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L2) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -39144,280 +49207,490 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private java.lang.Object srcMacAddress_ = "";
+      private context.ContextOuterClass.ConnectionSettings_L0 l0_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder> l0Builder_;
       /**
-       * <code>string src_mac_address = 1;</code>
-       * @return The srcMacAddress.
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * @return Whether the l0 field is set.
        */
-      public java.lang.String getSrcMacAddress() {
-        java.lang.Object ref = srcMacAddress_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          srcMacAddress_ = s;
-          return s;
+      public boolean hasL0() {
+        return l0Builder_ != null || l0_ != null;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * @return The l0.
+       */
+      public context.ContextOuterClass.ConnectionSettings_L0 getL0() {
+        if (l0Builder_ == null) {
+          return l0_ == null ? context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
         } else {
-          return (java.lang.String) ref;
+          return l0Builder_.getMessage();
         }
+
+        return this;
       }
       /**
-       * <code>string src_mac_address = 1;</code>
-       * @return The bytes for srcMacAddress.
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
-      public com.google.protobuf.ByteString
-          getSrcMacAddressBytes() {
-        java.lang.Object ref = srcMacAddress_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          srcMacAddress_ = b;
-          return b;
+      public Builder setL0(context.ContextOuterClass.ConnectionSettings_L0 value) {
+        if (l0Builder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          l0_ = value;
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          l0Builder_.setMessage(value);
         }
+
+        return this;
       }
       /**
-       * <code>string src_mac_address = 1;</code>
-       * @param value The srcMacAddress to set.
-       * @return This builder for chaining.
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
-      public Builder setSrcMacAddress(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        srcMacAddress_ = value;
-        onChanged();
+      public Builder setL0(
+          context.ContextOuterClass.ConnectionSettings_L0.Builder builderForValue) {
+        if (l0Builder_ == null) {
+          l0_ = builderForValue.build();
+          onChanged();
+        } else {
+          l0Builder_.setMessage(builderForValue.build());
+        }
+
         return this;
       }
       /**
-       * <code>string src_mac_address = 1;</code>
-       * @return This builder for chaining.
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
-      public Builder clearSrcMacAddress() {
-        
-        srcMacAddress_ = getDefaultInstance().getSrcMacAddress();
-        onChanged();
+      public Builder mergeL0(context.ContextOuterClass.ConnectionSettings_L0 value) {
+        if (l0Builder_ == null) {
+          if (l0_ != null) {
+            l0_ =
+              context.ContextOuterClass.ConnectionSettings_L0.newBuilder(l0_).mergeFrom(value).buildPartial();
+          } else {
+            l0_ = value;
+          }
+          onChanged();
+        } else {
+          l0Builder_.mergeFrom(value);
+        }
+
         return this;
       }
       /**
-       * <code>string src_mac_address = 1;</code>
-       * @param value The bytes for srcMacAddress to set.
-       * @return This builder for chaining.
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
-      public Builder setSrcMacAddressBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
+      public Builder clearL0() {
+        if (l0Builder_ == null) {
+          l0_ = null;
+          onChanged();
+        } else {
+          l0_ = null;
+          l0Builder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettings_L0.Builder getL0Builder() {
         
-        srcMacAddress_ = value;
         onChanged();
-        return this;
+        return getL0FieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder() {
+        if (l0Builder_ != null) {
+          return l0Builder_.getMessageOrBuilder();
+        } else {
+          return l0_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
+        }
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder> 
+          getL0FieldBuilder() {
+        if (l0Builder_ == null) {
+          l0Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder>(
+                  getL0(),
+                  getParentForChildren(),
+                  isClean());
+          l0_ = null;
+        }
+        return l0Builder_;
       }
 
-      private java.lang.Object dstMacAddress_ = "";
+      private context.ContextOuterClass.ConnectionSettings_L2 l2_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder> l2Builder_;
       /**
-       * <code>string dst_mac_address = 2;</code>
-       * @return The dstMacAddress.
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * @return Whether the l2 field is set.
        */
-      public java.lang.String getDstMacAddress() {
-        java.lang.Object ref = dstMacAddress_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          dstMacAddress_ = s;
-          return s;
+      public boolean hasL2() {
+        return l2Builder_ != null || l2_ != null;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * @return The l2.
+       */
+      public context.ContextOuterClass.ConnectionSettings_L2 getL2() {
+        if (l2Builder_ == null) {
+          return l2_ == null ? context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
         } else {
-          return (java.lang.String) ref;
+          return l2Builder_.getMessage();
         }
       }
       /**
-       * <code>string dst_mac_address = 2;</code>
-       * @return The bytes for dstMacAddress.
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public com.google.protobuf.ByteString
-          getDstMacAddressBytes() {
-        java.lang.Object ref = dstMacAddress_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          dstMacAddress_ = b;
-          return b;
+      public Builder setL2(context.ContextOuterClass.ConnectionSettings_L2 value) {
+        if (l2Builder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          l2_ = value;
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          l2Builder_.setMessage(value);
         }
+
+        return this;
       }
       /**
-       * <code>string dst_mac_address = 2;</code>
-       * @param value The dstMacAddress to set.
-       * @return This builder for chaining.
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public Builder setDstMacAddress(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        dstMacAddress_ = value;
-        onChanged();
+      public Builder setL2(
+          context.ContextOuterClass.ConnectionSettings_L2.Builder builderForValue) {
+        if (l2Builder_ == null) {
+          l2_ = builderForValue.build();
+          onChanged();
+        } else {
+          l2Builder_.setMessage(builderForValue.build());
+        }
+
         return this;
       }
       /**
-       * <code>string dst_mac_address = 2;</code>
-       * @return This builder for chaining.
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public Builder clearDstMacAddress() {
-        
-        dstMacAddress_ = getDefaultInstance().getDstMacAddress();
-        onChanged();
+      public Builder mergeL2(context.ContextOuterClass.ConnectionSettings_L2 value) {
+        if (l2Builder_ == null) {
+          if (l2_ != null) {
+            l2_ =
+              context.ContextOuterClass.ConnectionSettings_L2.newBuilder(l2_).mergeFrom(value).buildPartial();
+          } else {
+            l2_ = value;
+          }
+          onChanged();
+        } else {
+          l2Builder_.mergeFrom(value);
+        }
+
         return this;
       }
       /**
-       * <code>string dst_mac_address = 2;</code>
-       * @param value The bytes for dstMacAddress to set.
-       * @return This builder for chaining.
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public Builder setDstMacAddressBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
+      public Builder clearL2() {
+        if (l2Builder_ == null) {
+          l2_ = null;
+          onChanged();
+        } else {
+          l2_ = null;
+          l2Builder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettings_L2.Builder getL2Builder() {
         
-        dstMacAddress_ = value;
         onChanged();
+        return getL2FieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder() {
+        if (l2Builder_ != null) {
+          return l2Builder_.getMessageOrBuilder();
+        } else {
+          return l2_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
+        }
+      }
+      /**
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder> 
+          getL2FieldBuilder() {
+        if (l2Builder_ == null) {
+          l2Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder>(
+                  getL2(),
+                  getParentForChildren(),
+                  isClean());
+          l2_ = null;
+        }
+        return l2Builder_;
+      }
+
+      private context.ContextOuterClass.ConnectionSettings_L3 l3_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder> l3Builder_;
+      /**
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+       * @return Whether the l3 field is set.
+       */
+      public boolean hasL3() {
+        return l3Builder_ != null || l3_ != null;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+       * @return The l3.
+       */
+      public context.ContextOuterClass.ConnectionSettings_L3 getL3() {
+        if (l3Builder_ == null) {
+          return l3_ == null ? context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
+        } else {
+          return l3Builder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+       */
+      public Builder setL3(context.ContextOuterClass.ConnectionSettings_L3 value) {
+        if (l3Builder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          l3_ = value;
+          onChanged();
+        } else {
+          l3Builder_.setMessage(value);
+        }
+
         return this;
       }
 
-      private int etherType_ ;
+      private context.ContextOuterClass.ConnectionSettings_L3 l3_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder> l3Builder_;
       /**
-       * <code>uint32 ether_type = 3;</code>
-       * @return The etherType.
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      @java.lang.Override
-      public int getEtherType() {
-        return etherType_;
+      public Builder setL3(
+          context.ContextOuterClass.ConnectionSettings_L3.Builder builderForValue) {
+        if (l3Builder_ == null) {
+          l3_ = builderForValue.build();
+          onChanged();
+        } else {
+          l3Builder_.setMessage(builderForValue.build());
+        }
+
+        return this;
       }
       /**
-       * <code>uint32 ether_type = 3;</code>
-       * @param value The etherType to set.
-       * @return This builder for chaining.
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder setEtherType(int value) {
-        
-        etherType_ = value;
-        onChanged();
+      public Builder mergeL3(context.ContextOuterClass.ConnectionSettings_L3 value) {
+        if (l3Builder_ == null) {
+          if (l3_ != null) {
+            l3_ =
+              context.ContextOuterClass.ConnectionSettings_L3.newBuilder(l3_).mergeFrom(value).buildPartial();
+          } else {
+            l3_ = value;
+          }
+          onChanged();
+        } else {
+          l3Builder_.mergeFrom(value);
+        }
+
         return this;
       }
       /**
-       * <code>uint32 ether_type = 3;</code>
-       * @return This builder for chaining.
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder clearEtherType() {
+      public Builder clearL3() {
+        if (l3Builder_ == null) {
+          l3_ = null;
+          onChanged();
+        } else {
+          l3_ = null;
+          l3Builder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettings_L3.Builder getL3Builder() {
         
-        etherType_ = 0;
         onChanged();
-        return this;
+        return getL3FieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder() {
+        if (l3Builder_ != null) {
+          return l3Builder_.getMessageOrBuilder();
+        } else {
+          return l3_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
+        }
+      }
+      /**
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder> 
+          getL3FieldBuilder() {
+        if (l3Builder_ == null) {
+          l3Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder>(
+                  getL3(),
+                  getParentForChildren(),
+                  isClean());
+          l3_ = null;
+        }
+        return l3Builder_;
       }
 
-      private int vlanId_ ;
+      private context.ContextOuterClass.ConnectionSettings_L4 l4_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder> l4Builder_;
       /**
-       * <code>uint32 vlan_id = 4;</code>
-       * @return The vlanId.
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+       * @return Whether the l4 field is set.
        */
-      @java.lang.Override
-      public int getVlanId() {
-        return vlanId_;
+      public boolean hasL4() {
+        return l4Builder_ != null || l4_ != null;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+       * @return The l4.
+       */
+      public context.ContextOuterClass.ConnectionSettings_L4 getL4() {
+        if (l4Builder_ == null) {
+          return l4_ == null ? context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
+        } else {
+          return l4Builder_.getMessage();
+        }
       }
+
+      private context.ContextOuterClass.ConnectionSettings_L4 l4_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder> l4Builder_;
       /**
-       * <code>uint32 vlan_id = 4;</code>
-       * @param value The vlanId to set.
-       * @return This builder for chaining.
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public Builder setVlanId(int value) {
-        
-        vlanId_ = value;
-        onChanged();
+      public Builder setL4(context.ContextOuterClass.ConnectionSettings_L4 value) {
+        if (l4Builder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          l4_ = value;
+          onChanged();
+        } else {
+          l4Builder_.setMessage(value);
+        }
+
         return this;
       }
       /**
-       * <code>uint32 vlan_id = 4;</code>
-       * @return This builder for chaining.
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public Builder clearVlanId() {
-        
-        vlanId_ = 0;
-        onChanged();
+      public Builder setL4(
+          context.ContextOuterClass.ConnectionSettings_L4.Builder builderForValue) {
+        if (l4Builder_ == null) {
+          l4_ = builderForValue.build();
+          onChanged();
+        } else {
+          l4Builder_.setMessage(builderForValue.build());
+        }
+
         return this;
       }
-
-      private int mplsLabel_ ;
       /**
-       * <code>uint32 mpls_label = 5;</code>
-       * @return The mplsLabel.
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      @java.lang.Override
-      public int getMplsLabel() {
-        return mplsLabel_;
+      public Builder mergeL4(context.ContextOuterClass.ConnectionSettings_L4 value) {
+        if (l4Builder_ == null) {
+          if (l4_ != null) {
+            l4_ =
+              context.ContextOuterClass.ConnectionSettings_L4.newBuilder(l4_).mergeFrom(value).buildPartial();
+          } else {
+            l4_ = value;
+          }
+          onChanged();
+        } else {
+          l4Builder_.mergeFrom(value);
+        }
+
+        return this;
       }
       /**
-       * <code>uint32 mpls_label = 5;</code>
-       * @param value The mplsLabel to set.
-       * @return This builder for chaining.
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public Builder setMplsLabel(int value) {
-        
-        mplsLabel_ = value;
-        onChanged();
+      public Builder clearL4() {
+        if (l4Builder_ == null) {
+          l4_ = null;
+          onChanged();
+        } else {
+          l4_ = null;
+          l4Builder_ = null;
+        }
+
         return this;
       }
       /**
-       * <code>uint32 mpls_label = 5;</code>
-       * @return This builder for chaining.
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public Builder clearMplsLabel() {
+      public context.ContextOuterClass.ConnectionSettings_L4.Builder getL4Builder() {
         
-        mplsLabel_ = 0;
         onChanged();
-        return this;
-      }
-
-      private int mplsTrafficClass_ ;
-      /**
-       * <code>uint32 mpls_traffic_class = 6;</code>
-       * @return The mplsTrafficClass.
-       */
-      @java.lang.Override
-      public int getMplsTrafficClass() {
-        return mplsTrafficClass_;
+        return getL4FieldBuilder().getBuilder();
       }
       /**
-       * <code>uint32 mpls_traffic_class = 6;</code>
-       * @param value The mplsTrafficClass to set.
-       * @return This builder for chaining.
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public Builder setMplsTrafficClass(int value) {
-        
-        mplsTrafficClass_ = value;
-        onChanged();
-        return this;
+      public context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder() {
+        if (l4Builder_ != null) {
+          return l4Builder_.getMessageOrBuilder();
+        } else {
+          return l4_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
+        }
       }
       /**
-       * <code>uint32 mpls_traffic_class = 6;</code>
-       * @return This builder for chaining.
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public Builder clearMplsTrafficClass() {
-        
-        mplsTrafficClass_ = 0;
-        onChanged();
-        return this;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder> 
+          getL4FieldBuilder() {
+        if (l4Builder_ == null) {
+          l4Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder>(
+                  getL4(),
+                  getParentForChildren(),
+                  isClean());
+          l4_ = null;
+        }
+        return l4Builder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -39432,114 +49705,165 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L2)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L2)
-    private static final context.ContextOuterClass.ConnectionSettings_L2 DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings)
+    private static final context.ContextOuterClass.ConnectionSettings DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L2();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings();
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionSettings getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionSettings_L2>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L2>() {
+    private static final com.google.protobuf.Parser<ConnectionSettings>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings>() {
       @java.lang.Override
-      public ConnectionSettings_L2 parsePartialFrom(
+      public ConnectionSettings parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionSettings_L2(input, extensionRegistry);
+        return new ConnectionSettings(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionSettings_L2> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionSettings_L2> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionSettings_L3OrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L3)
+  public interface ConnectionOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Connection)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string src_ip_address = 1;</code>
-     * @return The srcIpAddress.
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return Whether the connectionId field is set.
      */
-    java.lang.String getSrcIpAddress();
+    boolean hasConnectionId();
     /**
-     * <code>string src_ip_address = 1;</code>
-     * @return The bytes for srcIpAddress.
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return The connectionId.
      */
-    com.google.protobuf.ByteString
-        getSrcIpAddressBytes();
+    context.ContextOuterClass.ConnectionId getConnectionId();
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     */
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
 
     /**
-     * <code>string dst_ip_address = 2;</code>
-     * @return The dstIpAddress.
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return Whether the serviceId field is set.
      */
-    java.lang.String getDstIpAddress();
+    boolean hasServiceId();
     /**
-     * <code>string dst_ip_address = 2;</code>
-     * @return The bytes for dstIpAddress.
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return The serviceId.
      */
-    com.google.protobuf.ByteString
-        getDstIpAddressBytes();
+    context.ContextOuterClass.ServiceId getServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
 
     /**
-     * <code>uint32 dscp = 3;</code>
-     * @return The dscp.
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
      */
-    int getDscp();
+    java.util.List<context.ContextOuterClass.EndPointId> 
+        getPathHopsEndpointIdsList();
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index);
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    int getPathHopsEndpointIdsCount();
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getPathHopsEndpointIdsOrBuilderList();
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
+        int index);
 
     /**
-     * <code>uint32 protocol = 4;</code>
-     * @return The protocol.
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
      */
-    int getProtocol();
+    java.util.List<context.ContextOuterClass.ServiceId> 
+        getSubServiceIdsList();
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    context.ContextOuterClass.ServiceId getSubServiceIds(int index);
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    int getSubServiceIdsCount();
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getSubServiceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
+        int index);
 
     /**
-     * <code>uint32 ttl = 5;</code>
-     * @return The ttl.
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     * @return Whether the settings field is set.
      */
-    int getTtl();
+    boolean hasSettings();
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     * @return The settings.
+     */
+    context.ContextOuterClass.ConnectionSettings getSettings();
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     */
+    context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder();
   }
   /**
-   * Protobuf type {@code context.ConnectionSettings_L3}
+   * Protobuf type {@code context.Connection}
    */
-  public static final class ConnectionSettings_L3 extends
+  public static final class Connection extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L3)
-      ConnectionSettings_L3OrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Connection)
+      ConnectionOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionSettings_L3.newBuilder() to construct.
-    private ConnectionSettings_L3(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Connection.newBuilder() to construct.
+    private Connection(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionSettings_L3() {
-      srcIpAddress_ = "";
-      dstIpAddress_ = "";
+    private Connection() {
+      pathHopsEndpointIds_ = java.util.Collections.emptyList();
+      subServiceIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionSettings_L3();
+      return new Connection();
     }
 
     @java.lang.Override
@@ -39547,7 +49871,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionSettings_L3(
+    private Connection(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -39555,6 +49879,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -39566,30 +49891,60 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
+              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
+              if (connectionId_ != null) {
+                subBuilder = connectionId_.toBuilder();
+              }
+              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(connectionId_);
+                connectionId_ = subBuilder.buildPartial();
+              }
 
-              srcIpAddress_ = s;
               break;
             }
             case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
+              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
+              if (serviceId_ != null) {
+                subBuilder = serviceId_.toBuilder();
+              }
+              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceId_);
+                serviceId_ = subBuilder.buildPartial();
+              }
 
-              dstIpAddress_ = s;
               break;
             }
-            case 24: {
-
-              dscp_ = input.readUInt32();
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                pathHopsEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              pathHopsEndpointIds_.add(
+                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
               break;
             }
-            case 32: {
-
-              protocol_ = input.readUInt32();
+            case 34: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                subServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              subServiceIds_.add(
+                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
               break;
             }
-            case 40: {
+            case 42: {
+              context.ContextOuterClass.ConnectionSettings.Builder subBuilder = null;
+              if (settings_ != null) {
+                subBuilder = settings_.toBuilder();
+              }
+              settings_ = input.readMessage(context.ContextOuterClass.ConnectionSettings.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(settings_);
+                settings_ = subBuilder.buildPartial();
+              }
 
-              ttl_ = input.readUInt32();
               break;
             }
             default: {
@@ -39607,130 +49962,188 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          pathHopsEndpointIds_ = java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          subServiceIds_ = java.util.Collections.unmodifiableList(subServiceIds_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
+      return context.ContextOuterClass.internal_static_context_Connection_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionSettings_L3.class, context.ContextOuterClass.ConnectionSettings_L3.Builder.class);
+              context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
     }
 
-    public static final int SRC_IP_ADDRESS_FIELD_NUMBER = 1;
-    private volatile java.lang.Object srcIpAddress_;
+    public static final int CONNECTION_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ConnectionId connectionId_;
     /**
-     * <code>string src_ip_address = 1;</code>
-     * @return The srcIpAddress.
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return Whether the connectionId field is set.
      */
     @java.lang.Override
-    public java.lang.String getSrcIpAddress() {
-      java.lang.Object ref = srcIpAddress_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        srcIpAddress_ = s;
-        return s;
-      }
+    public boolean hasConnectionId() {
+      return connectionId_ != null;
     }
     /**
-     * <code>string src_ip_address = 1;</code>
-     * @return The bytes for srcIpAddress.
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return The connectionId.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getSrcIpAddressBytes() {
-      java.lang.Object ref = srcIpAddress_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        srcIpAddress_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public context.ContextOuterClass.ConnectionId getConnectionId() {
+      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+    }
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+      return getConnectionId();
     }
 
-    public static final int DST_IP_ADDRESS_FIELD_NUMBER = 2;
-    private volatile java.lang.Object dstIpAddress_;
+    public static final int SERVICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ServiceId serviceId_;
     /**
-     * <code>string dst_ip_address = 2;</code>
-     * @return The dstIpAddress.
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return Whether the serviceId field is set.
      */
     @java.lang.Override
-    public java.lang.String getDstIpAddress() {
-      java.lang.Object ref = dstIpAddress_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        dstIpAddress_ = s;
-        return s;
-      }
+    public boolean hasServiceId() {
+      return serviceId_ != null;
     }
+
+    public static final int SERVICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ServiceId serviceId_;
     /**
-     * <code>string dst_ip_address = 2;</code>
-     * @return The bytes for dstIpAddress.
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return The serviceId.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getDstIpAddressBytes() {
-      java.lang.Object ref = dstIpAddress_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        dstIpAddress_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public context.ContextOuterClass.ServiceId getServiceId() {
+      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+      return getServiceId();
+    }
+
+    public static final int PATH_HOPS_ENDPOINT_IDS_FIELD_NUMBER = 3;
+    private java.util.List<context.ContextOuterClass.EndPointId> pathHopsEndpointIds_;
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.EndPointId> getPathHopsEndpointIdsList() {
+      return pathHopsEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getPathHopsEndpointIdsOrBuilderList() {
+      return pathHopsEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public int getPathHopsEndpointIdsCount() {
+      return pathHopsEndpointIds_.size();
+    }
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index) {
+      return pathHopsEndpointIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
+        int index) {
+      return pathHopsEndpointIds_.get(index);
+    }
+
+    public static final int SUB_SERVICE_IDS_FIELD_NUMBER = 4;
+    private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_;
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ServiceId> getSubServiceIdsList() {
+      return subServiceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getSubServiceIdsOrBuilderList() {
+      return subServiceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public int getSubServiceIdsCount() {
+      return subServiceIds_.size();
+    }
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
+      return subServiceIds_.get(index);
     }
-
-    public static final int DSCP_FIELD_NUMBER = 3;
-    private int dscp_;
     /**
-     * <code>uint32 dscp = 3;</code>
-     * @return The dscp.
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
      */
     @java.lang.Override
-    public int getDscp() {
-      return dscp_;
+    public context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
+        int index) {
+      return subServiceIds_.get(index);
     }
 
-    public static final int PROTOCOL_FIELD_NUMBER = 4;
-    private int protocol_;
+    public static final int SETTINGS_FIELD_NUMBER = 5;
+    private context.ContextOuterClass.ConnectionSettings settings_;
     /**
-     * <code>uint32 protocol = 4;</code>
-     * @return The protocol.
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     * @return Whether the settings field is set.
      */
     @java.lang.Override
-    public int getProtocol() {
-      return protocol_;
+    public boolean hasSettings() {
+      return settings_ != null;
     }
-
-    public static final int TTL_FIELD_NUMBER = 5;
-    private int ttl_;
     /**
-     * <code>uint32 ttl = 5;</code>
-     * @return The ttl.
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     * @return The settings.
      */
     @java.lang.Override
-    public int getTtl() {
-      return ttl_;
+    public context.ContextOuterClass.ConnectionSettings getSettings() {
+      return settings_ == null ? context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
+    }
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder() {
+      return getSettings();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -39747,77 +50160,94 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (!getSrcIpAddressBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcIpAddress_);
+      if (connectionId_ != null) {
+        output.writeMessage(1, getConnectionId());
       }
-      if (!getDstIpAddressBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dstIpAddress_);
+      if (serviceId_ != null) {
+        output.writeMessage(2, getServiceId());
       }
-      if (dscp_ != 0) {
-        output.writeUInt32(3, dscp_);
+      for (int i = 0; i < pathHopsEndpointIds_.size(); i++) {
+        output.writeMessage(3, pathHopsEndpointIds_.get(i));
       }
-      if (protocol_ != 0) {
-        output.writeUInt32(4, protocol_);
+      for (int i = 0; i < subServiceIds_.size(); i++) {
+        output.writeMessage(4, subServiceIds_.get(i));
       }
-      if (ttl_ != 0) {
-        output.writeUInt32(5, ttl_);
+      if (settings_ != null) {
+        output.writeMessage(5, getSettings());
       }
       unknownFields.writeTo(output);
     }
-
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
     @java.lang.Override
     public int getSerializedSize() {
       int size = memoizedSize;
       if (size != -1) return size;
 
       size = 0;
-      if (!getSrcIpAddressBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcIpAddress_);
+      if (connectionId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getConnectionId());
       }
-      if (!getDstIpAddressBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dstIpAddress_);
+      if (serviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getServiceId());
       }
-      if (dscp_ != 0) {
+      for (int i = 0; i < pathHopsEndpointIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(3, dscp_);
+          .computeMessageSize(3, pathHopsEndpointIds_.get(i));
       }
-      if (protocol_ != 0) {
+      for (int i = 0; i < subServiceIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(4, protocol_);
+          .computeMessageSize(4, subServiceIds_.get(i));
       }
-      if (ttl_ != 0) {
+      if (settings_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(5, ttl_);
+          .computeMessageSize(5, getSettings());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
     }
-
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
     @java.lang.Override
     public boolean equals(final java.lang.Object obj) {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L3)) {
+      if (!(obj instanceof context.ContextOuterClass.Connection)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionSettings_L3 other = (context.ContextOuterClass.ConnectionSettings_L3) obj;
+      context.ContextOuterClass.Connection other = (context.ContextOuterClass.Connection) obj;
 
-      if (!getSrcIpAddress()
-          .equals(other.getSrcIpAddress())) return false;
-      if (!getDstIpAddress()
-          .equals(other.getDstIpAddress())) return false;
-      if (getDscp()
-          != other.getDscp()) return false;
-      if (getProtocol()
-          != other.getProtocol()) return false;
-      if (getTtl()
-          != other.getTtl()) return false;
+      if (hasConnectionId() != other.hasConnectionId()) return false;
+      if (hasConnectionId()) {
+        if (!getConnectionId()
+            .equals(other.getConnectionId())) return false;
+      }
+      if (hasServiceId() != other.hasServiceId()) return false;
+      if (hasServiceId()) {
+        if (!getServiceId()
+            .equals(other.getServiceId())) return false;
+      }
+      if (!getPathHopsEndpointIdsList()
+          .equals(other.getPathHopsEndpointIdsList())) return false;
+      if (!getSubServiceIdsList()
+          .equals(other.getSubServiceIdsList())) return false;
+      if (hasSettings() != other.hasSettings()) return false;
+      if (hasSettings()) {
+        if (!getSettings()
+            .equals(other.getSettings())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
-
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
     @java.lang.Override
     public int hashCode() {
       if (memoizedHashCode != 0) {
@@ -39825,84 +50255,94 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + SRC_IP_ADDRESS_FIELD_NUMBER;
-      hash = (53 * hash) + getSrcIpAddress().hashCode();
-      hash = (37 * hash) + DST_IP_ADDRESS_FIELD_NUMBER;
-      hash = (53 * hash) + getDstIpAddress().hashCode();
-      hash = (37 * hash) + DSCP_FIELD_NUMBER;
-      hash = (53 * hash) + getDscp();
-      hash = (37 * hash) + PROTOCOL_FIELD_NUMBER;
-      hash = (53 * hash) + getProtocol();
-      hash = (37 * hash) + TTL_FIELD_NUMBER;
-      hash = (53 * hash) + getTtl();
+      if (hasConnectionId()) {
+        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionId().hashCode();
+      }
+      if (hasServiceId()) {
+        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceId().hashCode();
+      }
+      if (getPathHopsEndpointIdsCount() > 0) {
+        hash = (37 * hash) + PATH_HOPS_ENDPOINT_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getPathHopsEndpointIdsList().hashCode();
+      }
+      if (getSubServiceIdsCount() > 0) {
+        hash = (37 * hash) + SUB_SERVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getSubServiceIdsList().hashCode();
+      }
+      if (hasSettings()) {
+        hash = (37 * hash) + SETTINGS_FIELD_NUMBER;
+        hash = (53 * hash) + getSettings().hashCode();
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(byte[] data)
+    public static context.ContextOuterClass.Connection parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Connection parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Connection parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseDelimitedFrom(
+    public static context.ContextOuterClass.Connection parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -39910,47 +50350,53 @@ public final class ContextOuterClass {
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
+    public static final int SUB_SERVICE_IDS_FIELD_NUMBER = 4;
+    private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_;
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
     @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
+    public java.util.List<context.ContextOuterClass.ServiceId> getSubServiceIdsList() {
+      return subServiceIds_;
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L3 prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Connection prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
     @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
+    public int getSubServiceIdsCount() {
+      return subServiceIds_.size();
     }
-
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
     @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
+    public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
+      return subServiceIds_.get(index);
     }
     /**
-     * Protobuf type {@code context.ConnectionSettings_L3}
+     * Protobuf type {@code context.Connection}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L3)
-        context.ContextOuterClass.ConnectionSettings_L3OrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Connection)
+        context.ContextOuterClass.ConnectionOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
+        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionSettings_L3.class, context.ContextOuterClass.ConnectionSettings_L3.Builder.class);
+                context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionSettings_L3.newBuilder()
+      // Construct using context.ContextOuterClass.Connection.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -39963,38 +50409,60 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getPathHopsEndpointIdsFieldBuilder();
+          getSubServiceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        srcIpAddress_ = "";
-
-        dstIpAddress_ = "";
-
-        dscp_ = 0;
-
-        protocol_ = 0;
-
-        ttl_ = 0;
-
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+        } else {
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
+        }
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          pathHopsEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          pathHopsEndpointIdsBuilder_.clear();
+        }
+        if (subServiceIdsBuilder_ == null) {
+          subServiceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          subServiceIdsBuilder_.clear();
+        }
+        if (settingsBuilder_ == null) {
+          settings_ = null;
+        } else {
+          settings_ = null;
+          settingsBuilder_ = null;
+        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
+        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance();
+      public context.ContextOuterClass.Connection getDefaultInstanceForType() {
+        return context.ContextOuterClass.Connection.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L3 build() {
-        context.ContextOuterClass.ConnectionSettings_L3 result = buildPartial();
+      public context.ContextOuterClass.Connection build() {
+        context.ContextOuterClass.Connection result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -40002,1048 +50470,994 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L3 buildPartial() {
-        context.ContextOuterClass.ConnectionSettings_L3 result = new context.ContextOuterClass.ConnectionSettings_L3(this);
-        result.srcIpAddress_ = srcIpAddress_;
-        result.dstIpAddress_ = dstIpAddress_;
-        result.dscp_ = dscp_;
-        result.protocol_ = protocol_;
-        result.ttl_ = ttl_;
+      public context.ContextOuterClass.Connection buildPartial() {
+        context.ContextOuterClass.Connection result = new context.ContextOuterClass.Connection(this);
+        int from_bitField0_ = bitField0_;
+        if (connectionIdBuilder_ == null) {
+          result.connectionId_ = connectionId_;
+        } else {
+          result.connectionId_ = connectionIdBuilder_.build();
+        }
+        if (serviceIdBuilder_ == null) {
+          result.serviceId_ = serviceId_;
+        } else {
+          result.serviceId_ = serviceIdBuilder_.build();
+        }
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            pathHopsEndpointIds_ = java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.pathHopsEndpointIds_ = pathHopsEndpointIds_;
+        } else {
+          result.pathHopsEndpointIds_ = pathHopsEndpointIdsBuilder_.build();
+        }
+        if (subServiceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            subServiceIds_ = java.util.Collections.unmodifiableList(subServiceIds_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.subServiceIds_ = subServiceIds_;
+        } else {
+          result.subServiceIds_ = subServiceIdsBuilder_.build();
+        }
+        if (settingsBuilder_ == null) {
+          result.settings_ = settings_;
+        } else {
+          result.settings_ = settingsBuilder_.build();
+        }
         onBuilt();
         return result;
       }
 
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (connectionId_ != null) {
+        output.writeMessage(1, getConnectionId());
       }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+      if (serviceId_ != null) {
+        output.writeMessage(2, getServiceId());
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionSettings_L3) {
-          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L3)other);
+        if (other instanceof context.ContextOuterClass.Connection) {
+          return mergeFrom((context.ContextOuterClass.Connection)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L3 other) {
-        if (other == context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance()) return this;
-        if (!other.getSrcIpAddress().isEmpty()) {
-          srcIpAddress_ = other.srcIpAddress_;
-          onChanged();
-        }
-        if (!other.getDstIpAddress().isEmpty()) {
-          dstIpAddress_ = other.dstIpAddress_;
-          onChanged();
-        }
-        if (other.getDscp() != 0) {
-          setDscp(other.getDscp());
-        }
-        if (other.getProtocol() != 0) {
-          setProtocol(other.getProtocol());
+      public Builder mergeFrom(context.ContextOuterClass.Connection other) {
+        if (other == context.ContextOuterClass.Connection.getDefaultInstance()) return this;
+        if (other.hasConnectionId()) {
+          mergeConnectionId(other.getConnectionId());
         }
-        if (other.getTtl() != 0) {
-          setTtl(other.getTtl());
+        if (other.hasServiceId()) {
+          mergeServiceId(other.getServiceId());
         }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.ConnectionSettings_L3 parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L3) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (!other.pathHopsEndpointIds_.isEmpty()) {
+            if (pathHopsEndpointIds_.isEmpty()) {
+              pathHopsEndpointIds_ = other.pathHopsEndpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensurePathHopsEndpointIdsIsMutable();
+              pathHopsEndpointIds_.addAll(other.pathHopsEndpointIds_);
+            }
+            onChanged();
           }
-        }
-        return this;
-      }
-
-      private java.lang.Object srcIpAddress_ = "";
-      /**
-       * <code>string src_ip_address = 1;</code>
-       * @return The srcIpAddress.
-       */
-      public java.lang.String getSrcIpAddress() {
-        java.lang.Object ref = srcIpAddress_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          srcIpAddress_ = s;
-          return s;
         } else {
-          return (java.lang.String) ref;
+          if (!other.pathHopsEndpointIds_.isEmpty()) {
+            if (pathHopsEndpointIdsBuilder_.isEmpty()) {
+              pathHopsEndpointIdsBuilder_.dispose();
+              pathHopsEndpointIdsBuilder_ = null;
+              pathHopsEndpointIds_ = other.pathHopsEndpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              pathHopsEndpointIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getPathHopsEndpointIdsFieldBuilder() : null;
+            } else {
+              pathHopsEndpointIdsBuilder_.addAllMessages(other.pathHopsEndpointIds_);
+            }
+          }
         }
-      }
-      /**
-       * <code>string src_ip_address = 1;</code>
-       * @return The bytes for srcIpAddress.
-       */
-      public com.google.protobuf.ByteString
-          getSrcIpAddressBytes() {
-        java.lang.Object ref = srcIpAddress_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          srcIpAddress_ = b;
-          return b;
+        if (subServiceIdsBuilder_ == null) {
+          if (!other.subServiceIds_.isEmpty()) {
+            if (subServiceIds_.isEmpty()) {
+              subServiceIds_ = other.subServiceIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureSubServiceIdsIsMutable();
+              subServiceIds_.addAll(other.subServiceIds_);
+            }
+            onChanged();
+          }
         } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>string src_ip_address = 1;</code>
-       * @param value The srcIpAddress to set.
-       * @return This builder for chaining.
-       */
-      public Builder setSrcIpAddress(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        srcIpAddress_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string src_ip_address = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearSrcIpAddress() {
-        
-        srcIpAddress_ = getDefaultInstance().getSrcIpAddress();
+          if (!other.subServiceIds_.isEmpty()) {
+            if (subServiceIdsBuilder_.isEmpty()) {
+              subServiceIdsBuilder_.dispose();
+              subServiceIdsBuilder_ = null;
+              subServiceIds_ = other.subServiceIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              subServiceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSubServiceIdsFieldBuilder() : null;
+            } else {
+              subServiceIdsBuilder_.addAllMessages(other.subServiceIds_);
+            }
+          }
+        }
+        if (other.hasSettings()) {
+          mergeSettings(other.getSettings());
+        }
+        this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
       }
-      /**
-       * <code>string src_ip_address = 1;</code>
-       * @param value The bytes for srcIpAddress to set.
-       * @return This builder for chaining.
-       */
-      public Builder setSrcIpAddressBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        srcIpAddress_ = value;
-        onChanged();
+      if (settings_ != null) {
+        output.writeMessage(5, getSettings());
+      }
+      unknownFields.writeTo(output);
+    }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Connection parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Connection) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
         return this;
       }
+      private int bitField0_;
 
-      private java.lang.Object dstIpAddress_ = "";
+      private context.ContextOuterClass.ConnectionId connectionId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
       /**
-       * <code>string dst_ip_address = 2;</code>
-       * @return The dstIpAddress.
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       * @return Whether the connectionId field is set.
        */
-      public java.lang.String getDstIpAddress() {
-        java.lang.Object ref = dstIpAddress_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          dstIpAddress_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
+      public boolean hasConnectionId() {
+        return connectionIdBuilder_ != null || connectionId_ != null;
       }
       /**
-       * <code>string dst_ip_address = 2;</code>
-       * @return The bytes for dstIpAddress.
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       * @return The connectionId.
        */
-      public com.google.protobuf.ByteString
-          getDstIpAddressBytes() {
-        java.lang.Object ref = dstIpAddress_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          dstIpAddress_ = b;
-          return b;
+      public context.ContextOuterClass.ConnectionId getConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          return connectionIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>string dst_ip_address = 2;</code>
-       * @param value The dstIpAddress to set.
-       * @return This builder for chaining.
+       * <code>.context.ConnectionId connection_id = 1;</code>
        */
-      public Builder setDstIpAddress(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        dstIpAddress_ = value;
-        onChanged();
+      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          connectionId_ = value;
+          onChanged();
+        } else {
+          connectionIdBuilder_.setMessage(value);
+        }
+
         return this;
       }
       /**
-       * <code>string dst_ip_address = 2;</code>
-       * @return This builder for chaining.
+       * <code>.context.ConnectionId connection_id = 1;</code>
        */
-      public Builder clearDstIpAddress() {
-        
-        dstIpAddress_ = getDefaultInstance().getDstIpAddress();
-        onChanged();
+      public Builder setConnectionId(
+          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = builderForValue.build();
+          onChanged();
+        } else {
+          connectionIdBuilder_.setMessage(builderForValue.build());
+        }
+
         return this;
       }
       /**
-       * <code>string dst_ip_address = 2;</code>
-       * @param value The bytes for dstIpAddress to set.
-       * @return This builder for chaining.
+       * <code>.context.ConnectionId connection_id = 1;</code>
        */
-      public Builder setDstIpAddressBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        dstIpAddress_ = value;
-        onChanged();
-        return this;
-      }
+      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (connectionId_ != null) {
+            connectionId_ =
+              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
+          } else {
+            connectionId_ = value;
+          }
+          onChanged();
+        } else {
+          connectionIdBuilder_.mergeFrom(value);
+        }
 
-      private int dscp_ ;
-      /**
-       * <code>uint32 dscp = 3;</code>
-       * @return The dscp.
-       */
-      @java.lang.Override
-      public int getDscp() {
-        return dscp_;
+        return this;
       }
       /**
-       * <code>uint32 dscp = 3;</code>
-       * @param value The dscp to set.
-       * @return This builder for chaining.
+       * <code>.context.ConnectionId connection_id = 1;</code>
        */
-      public Builder setDscp(int value) {
-        
-        dscp_ = value;
-        onChanged();
+      public Builder clearConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+          onChanged();
+        } else {
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
+        }
+
         return this;
       }
       /**
-       * <code>uint32 dscp = 3;</code>
-       * @return This builder for chaining.
+       * <code>.context.ConnectionId connection_id = 1;</code>
        */
-      public Builder clearDscp() {
+      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
         
-        dscp_ = 0;
         onChanged();
-        return this;
+        return getConnectionIdFieldBuilder().getBuilder();
       }
-
-      private int protocol_ ;
       /**
-       * <code>uint32 protocol = 4;</code>
-       * @return The protocol.
+       * <code>.context.ConnectionId connection_id = 1;</code>
        */
-      @java.lang.Override
-      public int getProtocol() {
-        return protocol_;
+      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+        if (connectionIdBuilder_ != null) {
+          return connectionIdBuilder_.getMessageOrBuilder();
+        } else {
+          return connectionId_ == null ?
+              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+        }
       }
       /**
-       * <code>uint32 protocol = 4;</code>
-       * @param value The protocol to set.
-       * @return This builder for chaining.
+       * <code>.context.ConnectionId connection_id = 1;</code>
        */
-      public Builder setProtocol(int value) {
-        
-        protocol_ = value;
-        onChanged();
-        return this;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
+          getConnectionIdFieldBuilder() {
+        if (connectionIdBuilder_ == null) {
+          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
+                  getConnectionId(),
+                  getParentForChildren(),
+                  isClean());
+          connectionId_ = null;
+        }
+        return connectionIdBuilder_;
       }
+
+      private context.ContextOuterClass.ServiceId serviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
       /**
-       * <code>uint32 protocol = 4;</code>
-       * @return This builder for chaining.
+       * <code>.context.ServiceId service_id = 2;</code>
+       * @return Whether the serviceId field is set.
        */
-      public Builder clearProtocol() {
-        
-        protocol_ = 0;
-        onChanged();
-        return this;
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
       }
-
-      private int ttl_ ;
       /**
-       * <code>uint32 ttl = 5;</code>
-       * @return The ttl.
+       * <code>.context.ServiceId service_id = 2;</code>
+       * @return The serviceId.
        */
-      @java.lang.Override
-      public int getTtl() {
-        return ttl_;
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        } else {
+          return serviceIdBuilder_.getMessage();
+        }
       }
       /**
-       * <code>uint32 ttl = 5;</code>
-       * @param value The ttl to set.
-       * @return This builder for chaining.
+       * <code>.context.ServiceId service_id = 2;</code>
        */
-      public Builder setTtl(int value) {
-        
-        ttl_ = value;
-        onChanged();
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceId_ = value;
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(value);
+        }
+
         return this;
       }
       /**
-       * <code>uint32 ttl = 5;</code>
-       * @return This builder for chaining.
+       * <code>.context.ServiceId service_id = 2;</code>
        */
-      public Builder clearTtl() {
-        
-        ttl_ = 0;
-        onChanged();
-        return this;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L3)
-    }
-
-    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L3)
-    private static final context.ContextOuterClass.ConnectionSettings_L3 DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L3();
-    }
-
-    public static context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<ConnectionSettings_L3>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L3>() {
-      @java.lang.Override
-      public ConnectionSettings_L3 parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionSettings_L3(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<ConnectionSettings_L3> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionSettings_L3> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface ConnectionSettings_L4OrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L4)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>uint32 src_port = 1;</code>
-     * @return The srcPort.
-     */
-    int getSrcPort();
-
-    /**
-     * <code>uint32 dst_port = 2;</code>
-     * @return The dstPort.
-     */
-    int getDstPort();
-
-    /**
-     * <code>uint32 tcp_flags = 3;</code>
-     * @return The tcpFlags.
-     */
-    int getTcpFlags();
-
-    /**
-     * <code>uint32 ttl = 4;</code>
-     * @return The ttl.
-     */
-    int getTtl();
-  }
-  /**
-   * Protobuf type {@code context.ConnectionSettings_L4}
-   */
-  public static final class ConnectionSettings_L4 extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L4)
-      ConnectionSettings_L4OrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use ConnectionSettings_L4.newBuilder() to construct.
-    private ConnectionSettings_L4(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private ConnectionSettings_L4() {
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new ConnectionSettings_L4();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private ConnectionSettings_L4(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            case 8: {
-
-              srcPort_ = input.readUInt32();
-              break;
-            }
-            case 16: {
-
-              dstPort_ = input.readUInt32();
-              break;
-            }
-            case 24: {
-
-              tcpFlags_ = input.readUInt32();
-              break;
-            }
-            case 32: {
-
-              ttl_ = input.readUInt32();
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(builderForValue.build());
         }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionSettings_L4.class, context.ContextOuterClass.ConnectionSettings_L4.Builder.class);
-    }
-
-    public static final int SRC_PORT_FIELD_NUMBER = 1;
-    private int srcPort_;
-    /**
-     * <code>uint32 src_port = 1;</code>
-     * @return The srcPort.
-     */
-    @java.lang.Override
-    public int getSrcPort() {
-      return srcPort_;
-    }
-
-    public static final int DST_PORT_FIELD_NUMBER = 2;
-    private int dstPort_;
-    /**
-     * <code>uint32 dst_port = 2;</code>
-     * @return The dstPort.
-     */
-    @java.lang.Override
-    public int getDstPort() {
-      return dstPort_;
-    }
-
-    public static final int TCP_FLAGS_FIELD_NUMBER = 3;
-    private int tcpFlags_;
-    /**
-     * <code>uint32 tcp_flags = 3;</code>
-     * @return The tcpFlags.
-     */
-    @java.lang.Override
-    public int getTcpFlags() {
-      return tcpFlags_;
-    }
-
-    public static final int TTL_FIELD_NUMBER = 4;
-    private int ttl_;
-    /**
-     * <code>uint32 ttl = 4;</code>
-     * @return The ttl.
-     */
-    @java.lang.Override
-    public int getTtl() {
-      return ttl_;
-    }
 
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (serviceId_ != null) {
+            serviceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+          } else {
+            serviceId_ = value;
+          }
+          onChanged();
+        } else {
+          serviceIdBuilder_.mergeFrom(value);
+        }
 
-      memoizedIsInitialized = 1;
-      return true;
-    }
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+          onChanged();
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
 
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (srcPort_ != 0) {
-        output.writeUInt32(1, srcPort_);
+        return this;
       }
-      if (dstPort_ != 0) {
-        output.writeUInt32(2, dstPort_);
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+        
+        onChanged();
+        return getServiceIdFieldBuilder().getBuilder();
       }
-      if (tcpFlags_ != 0) {
-        output.writeUInt32(3, tcpFlags_);
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        }
       }
-      if (ttl_ != 0) {
-        output.writeUInt32(4, ttl_);
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getServiceId(),
+                  getParentForChildren(),
+                  isClean());
+          serviceId_ = null;
+        }
+        return serviceIdBuilder_;
       }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
 
-      size = 0;
-      if (srcPort_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(1, srcPort_);
+      private java.util.List<context.ContextOuterClass.EndPointId> pathHopsEndpointIds_ =
+        java.util.Collections.emptyList();
+      private void ensurePathHopsEndpointIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          pathHopsEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(pathHopsEndpointIds_);
+          bitField0_ |= 0x00000001;
+         }
       }
-      if (dstPort_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(2, dstPort_);
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> pathHopsEndpointIdsBuilder_;
+
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId> getPathHopsEndpointIdsList() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+        } else {
+          return pathHopsEndpointIdsBuilder_.getMessageList();
+        }
       }
-      if (tcpFlags_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(3, tcpFlags_);
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public int getPathHopsEndpointIdsCount() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return pathHopsEndpointIds_.size();
+        } else {
+          return pathHopsEndpointIdsBuilder_.getCount();
+        }
       }
-      if (ttl_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(4, ttl_);
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return pathHopsEndpointIds_.get(index);
+        } else {
+          return pathHopsEndpointIdsBuilder_.getMessage(index);
+        }
       }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder setPathHopsEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.set(index, value);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.setMessage(index, value);
+        }
+        return this;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L4)) {
-        return super.equals(obj);
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder setPathHopsEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
       }
-      context.ContextOuterClass.ConnectionSettings_L4 other = (context.ContextOuterClass.ConnectionSettings_L4) obj;
-
-      if (getSrcPort()
-          != other.getSrcPort()) return false;
-      if (getDstPort()
-          != other.getDstPort()) return false;
-      if (getTcpFlags()
-          != other.getTcpFlags()) return false;
-      if (getTtl()
-          != other.getTtl()) return false;
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addPathHopsEndpointIds(context.ContextOuterClass.EndPointId value) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.add(value);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addMessage(value);
+        }
+        return this;
       }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + SRC_PORT_FIELD_NUMBER;
-      hash = (53 * hash) + getSrcPort();
-      hash = (37 * hash) + DST_PORT_FIELD_NUMBER;
-      hash = (53 * hash) + getDstPort();
-      hash = (37 * hash) + TCP_FLAGS_FIELD_NUMBER;
-      hash = (53 * hash) + getTcpFlags();
-      hash = (37 * hash) + TTL_FIELD_NUMBER;
-      hash = (53 * hash) + getTtl();
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L4 prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code context.ConnectionSettings_L4}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L4)
-        context.ContextOuterClass.ConnectionSettings_L4OrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addPathHopsEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.add(index, value);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addMessage(index, value);
+        }
+        return this;
       }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionSettings_L4.class, context.ContextOuterClass.ConnectionSettings_L4.Builder.class);
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addPathHopsEndpointIds(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
       }
-
-      // Construct using context.ContextOuterClass.ConnectionSettings_L4.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addPathHopsEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
       }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addAllPathHopsEndpointIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, pathHopsEndpointIds_);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addAllMessages(values);
+        }
+        return this;
       }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder clearPathHopsEndpointIds() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          pathHopsEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.clear();
         }
+        return this;
       }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        srcPort_ = 0;
-
-        dstPort_ = 0;
-
-        tcpFlags_ = 0;
-
-        ttl_ = 0;
-
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder removePathHopsEndpointIds(int index) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.remove(index);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.remove(index);
+        }
         return this;
       }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getPathHopsEndpointIdsBuilder(
+          int index) {
+        return getPathHopsEndpointIdsFieldBuilder().getBuilder(index);
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance();
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
+          int index) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return pathHopsEndpointIds_.get(index);  } else {
+          return pathHopsEndpointIdsBuilder_.getMessageOrBuilder(index);
+        }
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L4 build() {
-        context.ContextOuterClass.ConnectionSettings_L4 result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+           getPathHopsEndpointIdsOrBuilderList() {
+        if (pathHopsEndpointIdsBuilder_ != null) {
+          return pathHopsEndpointIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
         }
-        return result;
+        return this;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L4 buildPartial() {
-        context.ContextOuterClass.ConnectionSettings_L4 result = new context.ContextOuterClass.ConnectionSettings_L4(this);
-        result.srcPort_ = srcPort_;
-        result.dstPort_ = dstPort_;
-        result.tcpFlags_ = tcpFlags_;
-        result.ttl_ = ttl_;
-        onBuilt();
-        return result;
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addPathHopsEndpointIdsBuilder() {
+        return getPathHopsEndpointIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addPathHopsEndpointIdsBuilder(
+          int index) {
+        return getPathHopsEndpointIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
+           getPathHopsEndpointIdsBuilderList() {
+        return getPathHopsEndpointIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getPathHopsEndpointIdsFieldBuilder() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          pathHopsEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  pathHopsEndpointIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          pathHopsEndpointIds_ = null;
+        }
+        return pathHopsEndpointIdsBuilder_;
       }
 
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
+      private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureSubServiceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          subServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(subServiceIds_);
+          bitField0_ |= 0x00000002;
+         }
       }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> subServiceIdsBuilder_;
+
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId> getSubServiceIdsList() {
+        if (subServiceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(subServiceIds_);
+        } else {
+          return subServiceIdsBuilder_.getMessageList();
+        }
       }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public int getSubServiceIdsCount() {
+        if (subServiceIdsBuilder_ == null) {
+          return subServiceIds_.size();
+        } else {
+          return subServiceIdsBuilder_.getCount();
+        }
       }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
+        if (subServiceIdsBuilder_ == null) {
+          return subServiceIds_.get(index);
+        } else {
+          return subServiceIdsBuilder_.getMessage(index);
+        }
       }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder setSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (subServiceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.set(index, value);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.setMessage(index, value);
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder setSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionSettings_L4) {
-          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L4)other);
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addSubServiceIds(context.ContextOuterClass.ServiceId value) {
+        if (subServiceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(value);
+          onChanged();
         } else {
-          super.mergeFrom(other);
-          return this;
+          subServiceIdsBuilder_.addMessage(value);
         }
+        return this;
       }
-
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L4 other) {
-        if (other == context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance()) return this;
-        if (other.getSrcPort() != 0) {
-          setSrcPort(other.getSrcPort());
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (subServiceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(index, value);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.addMessage(index, value);
         }
-        if (other.getDstPort() != 0) {
-          setDstPort(other.getDstPort());
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addSubServiceIds(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.addMessage(builderForValue.build());
         }
-        if (other.getTcpFlags() != 0) {
-          setTcpFlags(other.getTcpFlags());
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.addMessage(index, builderForValue.build());
         }
-        if (other.getTtl() != 0) {
-          setTtl(other.getTtl());
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addAllSubServiceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, subServiceIds_);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.addAllMessages(values);
         }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
         return this;
       }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder clearSubServiceIds() {
+        if (subServiceIdsBuilder_ == null) {
+          subServiceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.clear();
+        }
+        return this;
       }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.ConnectionSettings_L4 parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L4) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder removeSubServiceIds(int index) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.remove(index);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.remove(index);
         }
         return this;
       }
-
-      private int srcPort_ ;
       /**
-       * <code>uint32 src_port = 1;</code>
-       * @return The srcPort.
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      @java.lang.Override
-      public int getSrcPort() {
-        return srcPort_;
+      public context.ContextOuterClass.ServiceId.Builder getSubServiceIdsBuilder(
+          int index) {
+        return getSubServiceIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>uint32 src_port = 1;</code>
-       * @param value The srcPort to set.
-       * @return This builder for chaining.
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public Builder setSrcPort(int value) {
-        
-        srcPort_ = value;
-        onChanged();
-        return this;
+      public context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
+          int index) {
+        if (subServiceIdsBuilder_ == null) {
+          return subServiceIds_.get(index);  } else {
+          return subServiceIdsBuilder_.getMessageOrBuilder(index);
+        }
       }
       /**
-       * <code>uint32 src_port = 1;</code>
-       * @return This builder for chaining.
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public Builder clearSrcPort() {
-        
-        srcPort_ = 0;
-        onChanged();
-        return this;
+      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+           getSubServiceIdsOrBuilderList() {
+        if (subServiceIdsBuilder_ != null) {
+          return subServiceIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(subServiceIds_);
+        }
       }
-
-      private int dstPort_ ;
       /**
-       * <code>uint32 dst_port = 2;</code>
-       * @return The dstPort.
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      @java.lang.Override
-      public int getDstPort() {
-        return dstPort_;
+      public context.ContextOuterClass.ServiceId.Builder addSubServiceIdsBuilder() {
+        return getSubServiceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ServiceId.getDefaultInstance());
       }
       /**
-       * <code>uint32 dst_port = 2;</code>
-       * @param value The dstPort to set.
-       * @return This builder for chaining.
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public Builder setDstPort(int value) {
-        
-        dstPort_ = value;
-        onChanged();
-        return this;
+      public context.ContextOuterClass.ServiceId.Builder addSubServiceIdsBuilder(
+          int index) {
+        return getSubServiceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
       }
       /**
-       * <code>uint32 dst_port = 2;</code>
-       * @return This builder for chaining.
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public Builder clearDstPort() {
-        
-        dstPort_ = 0;
-        onChanged();
-        return this;
+      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
+           getSubServiceIdsBuilderList() {
+        return getSubServiceIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getSubServiceIdsFieldBuilder() {
+        if (subServiceIdsBuilder_ == null) {
+          subServiceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  subServiceIds_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          subServiceIds_ = null;
+        }
+        return subServiceIdsBuilder_;
       }
 
-      private int tcpFlags_ ;
+      private context.ContextOuterClass.ConnectionSettings settings_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder> settingsBuilder_;
       /**
-       * <code>uint32 tcp_flags = 3;</code>
-       * @return The tcpFlags.
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       * @return Whether the settings field is set.
        */
-      @java.lang.Override
-      public int getTcpFlags() {
-        return tcpFlags_;
+      public boolean hasSettings() {
+        return settingsBuilder_ != null || settings_ != null;
       }
       /**
-       * <code>uint32 tcp_flags = 3;</code>
-       * @param value The tcpFlags to set.
-       * @return This builder for chaining.
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       * @return The settings.
        */
-      public Builder setTcpFlags(int value) {
-        
-        tcpFlags_ = value;
-        onChanged();
-        return this;
+      public context.ContextOuterClass.ConnectionSettings getSettings() {
+        if (settingsBuilder_ == null) {
+          return settings_ == null ? context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
+        } else {
+          return settingsBuilder_.getMessage();
+        }
       }
       /**
-       * <code>uint32 tcp_flags = 3;</code>
-       * @return This builder for chaining.
+       * <code>.context.ConnectionSettings settings = 5;</code>
        */
-      public Builder clearTcpFlags() {
-        
-        tcpFlags_ = 0;
-        onChanged();
+      public Builder setSettings(context.ContextOuterClass.ConnectionSettings value) {
+        if (settingsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          settings_ = value;
+          onChanged();
+        } else {
+          settingsBuilder_.setMessage(value);
+        }
+
         return this;
       }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public Builder setSettings(
+          context.ContextOuterClass.ConnectionSettings.Builder builderForValue) {
+        if (settingsBuilder_ == null) {
+          settings_ = builderForValue.build();
+          onChanged();
+        } else {
+          settingsBuilder_.setMessage(builderForValue.build());
+        }
 
-      private int ttl_ ;
+        return this;
+      }
       /**
-       * <code>uint32 ttl = 4;</code>
-       * @return The ttl.
+       * <code>.context.ConnectionSettings settings = 5;</code>
        */
-      @java.lang.Override
-      public int getTtl() {
-        return ttl_;
+      public Builder mergeSettings(context.ContextOuterClass.ConnectionSettings value) {
+        if (settingsBuilder_ == null) {
+          if (settings_ != null) {
+            settings_ =
+              context.ContextOuterClass.ConnectionSettings.newBuilder(settings_).mergeFrom(value).buildPartial();
+          } else {
+            settings_ = value;
+          }
+          onChanged();
+        } else {
+          settingsBuilder_.mergeFrom(value);
+        }
+
+        return this;
       }
       /**
-       * <code>uint32 ttl = 4;</code>
-       * @param value The ttl to set.
-       * @return This builder for chaining.
+       * <code>.context.ConnectionSettings settings = 5;</code>
        */
-      public Builder setTtl(int value) {
-        
-        ttl_ = value;
-        onChanged();
+      public Builder clearSettings() {
+        if (settingsBuilder_ == null) {
+          settings_ = null;
+          onChanged();
+        } else {
+          settings_ = null;
+          settingsBuilder_ = null;
+        }
+
         return this;
       }
       /**
-       * <code>uint32 ttl = 4;</code>
-       * @return This builder for chaining.
+       * <code>.context.ConnectionSettings settings = 5;</code>
        */
-      public Builder clearTtl() {
+      public context.ContextOuterClass.ConnectionSettings.Builder getSettingsBuilder() {
         
-        ttl_ = 0;
         onChanged();
-        return this;
+        return getSettingsFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder() {
+        if (settingsBuilder_ != null) {
+          return settingsBuilder_.getMessageOrBuilder();
+        } else {
+          return settings_ == null ?
+              context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
+        }
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder> 
+          getSettingsFieldBuilder() {
+        if (settingsBuilder_ == null) {
+          settingsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder>(
+                  getSettings(),
+                  getParentForChildren(),
+                  isClean());
+          settings_ = null;
+        }
+        return settingsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -41058,130 +51472,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L4)
+      // @@protoc_insertion_point(builder_scope:context.Connection)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L4)
-    private static final context.ContextOuterClass.ConnectionSettings_L4 DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Connection)
+    private static final context.ContextOuterClass.Connection DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L4();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Connection();
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstance() {
+    public static context.ContextOuterClass.Connection getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionSettings_L4>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L4>() {
+    private static final com.google.protobuf.Parser<Connection>
+        PARSER = new com.google.protobuf.AbstractParser<Connection>() {
       @java.lang.Override
-      public ConnectionSettings_L4 parsePartialFrom(
+      public Connection parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionSettings_L4(input, extensionRegistry);
+        return new Connection(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionSettings_L4> parser() {
+    public static com.google.protobuf.Parser<Connection> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionSettings_L4> getParserForType() {
+    public com.google.protobuf.Parser<Connection> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstanceForType() {
+    public context.ContextOuterClass.Connection getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionSettingsOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings)
+  public interface ConnectionIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionIdList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-     * @return Whether the l0 field is set.
-     */
-    boolean hasL0();
-    /**
-     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-     * @return The l0.
-     */
-    context.ContextOuterClass.ConnectionSettings_L0 getL0();
-    /**
-     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-     */
-    context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder();
-
-    /**
-     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-     * @return Whether the l2 field is set.
-     */
-    boolean hasL2();
-    /**
-     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-     * @return The l2.
-     */
-    context.ContextOuterClass.ConnectionSettings_L2 getL2();
-    /**
-     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-     */
-    context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder();
-
-    /**
-     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-     * @return Whether the l3 field is set.
-     */
-    boolean hasL3();
-    /**
-     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-     * @return The l3.
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
-    context.ContextOuterClass.ConnectionSettings_L3 getL3();
+    java.util.List<context.ContextOuterClass.ConnectionId> 
+        getConnectionIdsList();
     /**
-     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
-    context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder();
-
+    context.ContextOuterClass.ConnectionId getConnectionIds(int index);
     /**
-     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-     * @return Whether the l4 field is set.
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
-    boolean hasL4();
+    int getConnectionIdsCount();
     /**
-     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-     * @return The l4.
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
-    context.ContextOuterClass.ConnectionSettings_L4 getL4();
+    java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+        getConnectionIdsOrBuilderList();
     /**
-     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
-    context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder();
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+        int index);
   }
   /**
-   * Protobuf type {@code context.ConnectionSettings}
+   * Protobuf type {@code context.ConnectionIdList}
    */
-  public static final class ConnectionSettings extends
+  public static final class ConnectionIdList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionSettings)
-      ConnectionSettingsOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionIdList)
+      ConnectionIdListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionSettings.newBuilder() to construct.
-    private ConnectionSettings(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionIdList.newBuilder() to construct.
+    private ConnectionIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionSettings() {
+    private ConnectionIdList() {
+      connectionIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionSettings();
+      return new ConnectionIdList();
     }
 
     @java.lang.Override
@@ -41189,7 +51568,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionSettings(
+    private ConnectionIdList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -41197,6 +51576,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -41208,55 +51588,12 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.ConnectionSettings_L0.Builder subBuilder = null;
-              if (l0_ != null) {
-                subBuilder = l0_.toBuilder();
-              }
-              l0_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L0.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(l0_);
-                l0_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              context.ContextOuterClass.ConnectionSettings_L2.Builder subBuilder = null;
-              if (l2_ != null) {
-                subBuilder = l2_.toBuilder();
-              }
-              l2_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L2.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(l2_);
-                l2_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 26: {
-              context.ContextOuterClass.ConnectionSettings_L3.Builder subBuilder = null;
-              if (l3_ != null) {
-                subBuilder = l3_.toBuilder();
-              }
-              l3_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L3.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(l3_);
-                l3_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 34: {
-              context.ContextOuterClass.ConnectionSettings_L4.Builder subBuilder = null;
-              if (l4_ != null) {
-                subBuilder = l4_.toBuilder();
-              }
-              l4_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L4.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(l4_);
-                l4_ = subBuilder.buildPartial();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>();
+                mutable_bitField0_ |= 0x00000001;
               }
-
+              connectionIds_.add(
+                  input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -41274,125 +51611,64 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionSettings.class, context.ContextOuterClass.ConnectionSettings.Builder.class);
-    }
-
-    public static final int L0_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.ConnectionSettings_L0 l0_;
-    /**
-     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-     * @return Whether the l0 field is set.
-     */
-    @java.lang.Override
-    public boolean hasL0() {
-      return l0_ != null;
-    }
-    /**
-     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-     * @return The l0.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L0 getL0() {
-      return l0_ == null ? context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
-    }
-    /**
-     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder() {
-      return getL0();
-    }
-
-    public static final int L2_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.ConnectionSettings_L2 l2_;
-    /**
-     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-     * @return Whether the l2 field is set.
-     */
-    @java.lang.Override
-    public boolean hasL2() {
-      return l2_ != null;
-    }
-    /**
-     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-     * @return The l2.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L2 getL2() {
-      return l2_ == null ? context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
-    }
-    /**
-     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder() {
-      return getL2();
+              context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
     }
 
-    public static final int L3_FIELD_NUMBER = 3;
-    private context.ContextOuterClass.ConnectionSettings_L3 l3_;
-    /**
-     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-     * @return Whether the l3 field is set.
-     */
-    @java.lang.Override
-    public boolean hasL3() {
-      return l3_ != null;
-    }
+    public static final int CONNECTION_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_;
     /**
-     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-     * @return The l3.
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L3 getL3() {
-      return l3_ == null ? context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
+    public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
+      return connectionIds_;
     }
     /**
-     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder() {
-      return getL3();
+    public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+        getConnectionIdsOrBuilderList() {
+      return connectionIds_;
     }
-
-    public static final int L4_FIELD_NUMBER = 4;
-    private context.ContextOuterClass.ConnectionSettings_L4 l4_;
     /**
-     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-     * @return Whether the l4 field is set.
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
     @java.lang.Override
-    public boolean hasL4() {
-      return l4_ != null;
+    public int getConnectionIdsCount() {
+      return connectionIds_.size();
     }
     /**
-     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-     * @return The l4.
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L4 getL4() {
-      return l4_ == null ? context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
+    public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
+      return connectionIds_.get(index);
     }
     /**
-     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder() {
-      return getL4();
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+        int index) {
+      return connectionIds_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -41409,17 +51685,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (l0_ != null) {
-        output.writeMessage(1, getL0());
-      }
-      if (l2_ != null) {
-        output.writeMessage(2, getL2());
-      }
-      if (l3_ != null) {
-        output.writeMessage(3, getL3());
-      }
-      if (l4_ != null) {
-        output.writeMessage(4, getL4());
+      for (int i = 0; i < connectionIds_.size(); i++) {
+        output.writeMessage(1, connectionIds_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -41430,21 +51697,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (l0_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getL0());
-      }
-      if (l2_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getL2());
-      }
-      if (l3_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, getL3());
-      }
-      if (l4_ != null) {
+      for (int i = 0; i < connectionIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, getL4());
+          .computeMessageSize(1, connectionIds_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -41456,31 +51711,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionIdList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionSettings other = (context.ContextOuterClass.ConnectionSettings) obj;
+      context.ContextOuterClass.ConnectionIdList other = (context.ContextOuterClass.ConnectionIdList) obj;
 
-      if (hasL0() != other.hasL0()) return false;
-      if (hasL0()) {
-        if (!getL0()
-            .equals(other.getL0())) return false;
-      }
-      if (hasL2() != other.hasL2()) return false;
-      if (hasL2()) {
-        if (!getL2()
-            .equals(other.getL2())) return false;
-      }
-      if (hasL3() != other.hasL3()) return false;
-      if (hasL3()) {
-        if (!getL3()
-            .equals(other.getL3())) return false;
-      }
-      if (hasL4() != other.hasL4()) return false;
-      if (hasL4()) {
-        if (!getL4()
-            .equals(other.getL4())) return false;
-      }
+      if (!getConnectionIdsList()
+          .equals(other.getConnectionIdsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -41492,90 +51729,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasL0()) {
-        hash = (37 * hash) + L0_FIELD_NUMBER;
-        hash = (53 * hash) + getL0().hashCode();
-      }
-      if (hasL2()) {
-        hash = (37 * hash) + L2_FIELD_NUMBER;
-        hash = (53 * hash) + getL2().hashCode();
-      }
-      if (hasL3()) {
-        hash = (37 * hash) + L3_FIELD_NUMBER;
-        hash = (53 * hash) + getL3().hashCode();
-      }
-      if (hasL4()) {
-        hash = (37 * hash) + L4_FIELD_NUMBER;
-        hash = (53 * hash) + getL4().hashCode();
+      if (getConnectionIdsCount() > 0) {
+        hash = (37 * hash) + CONNECTION_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionIdsList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -41588,7 +51813,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionIdList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -41604,26 +51829,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionSettings}
+     * Protobuf type {@code context.ConnectionIdList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings)
-        context.ContextOuterClass.ConnectionSettingsOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionIdList)
+        context.ContextOuterClass.ConnectionIdListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionSettings.class, context.ContextOuterClass.ConnectionSettings.Builder.class);
+                context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionSettings.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionIdList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -41636,34 +51861,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getConnectionIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (l0Builder_ == null) {
-          l0_ = null;
-        } else {
-          l0_ = null;
-          l0Builder_ = null;
-        }
-        if (l2Builder_ == null) {
-          l2_ = null;
-        } else {
-          l2_ = null;
-          l2Builder_ = null;
-        }
-        if (l3Builder_ == null) {
-          l3_ = null;
-        } else {
-          l3_ = null;
-          l3Builder_ = null;
-        }
-        if (l4Builder_ == null) {
-          l4_ = null;
+        if (connectionIdsBuilder_ == null) {
+          connectionIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          l4_ = null;
-          l4Builder_ = null;
+          connectionIdsBuilder_.clear();
         }
         return this;
       }
@@ -41671,17 +51879,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionSettings.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionIdList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings build() {
-        context.ContextOuterClass.ConnectionSettings result = buildPartial();
+      public context.ContextOuterClass.ConnectionIdList build() {
+        context.ContextOuterClass.ConnectionIdList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -41689,27 +51897,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings buildPartial() {
-        context.ContextOuterClass.ConnectionSettings result = new context.ContextOuterClass.ConnectionSettings(this);
-        if (l0Builder_ == null) {
-          result.l0_ = l0_;
-        } else {
-          result.l0_ = l0Builder_.build();
-        }
-        if (l2Builder_ == null) {
-          result.l2_ = l2_;
-        } else {
-          result.l2_ = l2Builder_.build();
-        }
-        if (l3Builder_ == null) {
-          result.l3_ = l3_;
-        } else {
-          result.l3_ = l3Builder_.build();
-        }
-        if (l4Builder_ == null) {
-          result.l4_ = l4_;
+      public context.ContextOuterClass.ConnectionIdList buildPartial() {
+        context.ContextOuterClass.ConnectionIdList result = new context.ContextOuterClass.ConnectionIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (connectionIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.connectionIds_ = connectionIds_;
         } else {
-          result.l4_ = l4Builder_.build();
+          result.connectionIds_ = connectionIdsBuilder_.build();
         }
         onBuilt();
         return result;
@@ -41749,531 +51947,310 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionSettings) {
-          return mergeFrom((context.ContextOuterClass.ConnectionSettings)other);
+        if (other instanceof context.ContextOuterClass.ConnectionIdList) {
+          return mergeFrom((context.ContextOuterClass.ConnectionIdList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings other) {
-        if (other == context.ContextOuterClass.ConnectionSettings.getDefaultInstance()) return this;
-        if (other.hasL0()) {
-          mergeL0(other.getL0());
-        }
-        if (other.hasL2()) {
-          mergeL2(other.getL2());
-        }
-        if (other.hasL3()) {
-          mergeL3(other.getL3());
-        }
-        if (other.hasL4()) {
-          mergeL4(other.getL4());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.ConnectionSettings parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionSettings) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private context.ContextOuterClass.ConnectionSettings_L0 l0_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder> l0Builder_;
-      /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-       * @return Whether the l0 field is set.
-       */
-      public boolean hasL0() {
-        return l0Builder_ != null || l0_ != null;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-       * @return The l0.
-       */
-      public context.ContextOuterClass.ConnectionSettings_L0 getL0() {
-        if (l0Builder_ == null) {
-          return l0_ == null ? context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
-        } else {
-          return l0Builder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-       */
-      public Builder setL0(context.ContextOuterClass.ConnectionSettings_L0 value) {
-        if (l0Builder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionIdList other) {
+        if (other == context.ContextOuterClass.ConnectionIdList.getDefaultInstance()) return this;
+        if (connectionIdsBuilder_ == null) {
+          if (!other.connectionIds_.isEmpty()) {
+            if (connectionIds_.isEmpty()) {
+              connectionIds_ = other.connectionIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureConnectionIdsIsMutable();
+              connectionIds_.addAll(other.connectionIds_);
+            }
+            onChanged();
           }
-          l0_ = value;
-          onChanged();
-        } else {
-          l0Builder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-       */
-      public Builder setL0(
-          context.ContextOuterClass.ConnectionSettings_L0.Builder builderForValue) {
-        if (l0Builder_ == null) {
-          l0_ = builderForValue.build();
-          onChanged();
         } else {
-          l0Builder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-       */
-      public Builder mergeL0(context.ContextOuterClass.ConnectionSettings_L0 value) {
-        if (l0Builder_ == null) {
-          if (l0_ != null) {
-            l0_ =
-              context.ContextOuterClass.ConnectionSettings_L0.newBuilder(l0_).mergeFrom(value).buildPartial();
-          } else {
-            l0_ = value;
+          if (!other.connectionIds_.isEmpty()) {
+            if (connectionIdsBuilder_.isEmpty()) {
+              connectionIdsBuilder_.dispose();
+              connectionIdsBuilder_ = null;
+              connectionIds_ = other.connectionIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              connectionIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getConnectionIdsFieldBuilder() : null;
+            } else {
+              connectionIdsBuilder_.addAllMessages(other.connectionIds_);
+            }
           }
-          onChanged();
-        } else {
-          l0Builder_.mergeFrom(value);
         }
-
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
         return this;
       }
-      /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-       */
-      public Builder clearL0() {
-        if (l0Builder_ == null) {
-          l0_ = null;
-          onChanged();
-        } else {
-          l0_ = null;
-          l0Builder_ = null;
-        }
 
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ConnectionIdList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ConnectionIdList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
         return this;
       }
-      /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-       */
-      public context.ContextOuterClass.ConnectionSettings_L0.Builder getL0Builder() {
-        
-        onChanged();
-        return getL0FieldBuilder().getBuilder();
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_ =
+        java.util.Collections.emptyList();
+      private void ensureConnectionIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>(connectionIds_);
+          bitField0_ |= 0x00000001;
+         }
       }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdsBuilder_;
+
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder() {
-        if (l0Builder_ != null) {
-          return l0Builder_.getMessageOrBuilder();
+      public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
+        if (connectionIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(connectionIds_);
         } else {
-          return l0_ == null ?
-              context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
+          return connectionIdsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder> 
-          getL0FieldBuilder() {
-        if (l0Builder_ == null) {
-          l0Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder>(
-                  getL0(),
-                  getParentForChildren(),
-                  isClean());
-          l0_ = null;
+      public int getConnectionIdsCount() {
+        if (connectionIdsBuilder_ == null) {
+          return connectionIds_.size();
+        } else {
+          return connectionIdsBuilder_.getCount();
         }
-        return l0Builder_;
-      }
-
-      private context.ContextOuterClass.ConnectionSettings_L2 l2_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder> l2Builder_;
-      /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-       * @return Whether the l2 field is set.
-       */
-      public boolean hasL2() {
-        return l2Builder_ != null || l2_ != null;
       }
       /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-       * @return The l2.
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionSettings_L2 getL2() {
-        if (l2Builder_ == null) {
-          return l2_ == null ? context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
+      public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
+        if (connectionIdsBuilder_ == null) {
+          return connectionIds_.get(index);
         } else {
-          return l2Builder_.getMessage();
+          return connectionIdsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder setL2(context.ContextOuterClass.ConnectionSettings_L2 value) {
-        if (l2Builder_ == null) {
+      public Builder setConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          l2_ = value;
+          ensureConnectionIdsIsMutable();
+          connectionIds_.set(index, value);
           onChanged();
         } else {
-          l2Builder_.setMessage(value);
+          connectionIdsBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder setL2(
-          context.ContextOuterClass.ConnectionSettings_L2.Builder builderForValue) {
-        if (l2Builder_ == null) {
-          l2_ = builderForValue.build();
+      public Builder setConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          l2Builder_.setMessage(builderForValue.build());
+          connectionIdsBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder mergeL2(context.ContextOuterClass.ConnectionSettings_L2 value) {
-        if (l2Builder_ == null) {
-          if (l2_ != null) {
-            l2_ =
-              context.ContextOuterClass.ConnectionSettings_L2.newBuilder(l2_).mergeFrom(value).buildPartial();
-          } else {
-            l2_ = value;
+      public Builder addConnectionIds(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(value);
           onChanged();
         } else {
-          l2Builder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-       */
-      public Builder clearL2() {
-        if (l2Builder_ == null) {
-          l2_ = null;
-          onChanged();
-        } else {
-          l2_ = null;
-          l2Builder_ = null;
+          connectionIdsBuilder_.addMessage(value);
         }
-
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-       */
-      public context.ContextOuterClass.ConnectionSettings_L2.Builder getL2Builder() {
-        
-        onChanged();
-        return getL2FieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-       */
-      public context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder() {
-        if (l2Builder_ != null) {
-          return l2Builder_.getMessageOrBuilder();
-        } else {
-          return l2_ == null ?
-              context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
-        }
-      }
-      /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder> 
-          getL2FieldBuilder() {
-        if (l2Builder_ == null) {
-          l2Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder>(
-                  getL2(),
-                  getParentForChildren(),
-                  isClean());
-          l2_ = null;
-        }
-        return l2Builder_;
-      }
-
-      private context.ContextOuterClass.ConnectionSettings_L3 l3_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder> l3Builder_;
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       * @return Whether the l3 field is set.
-       */
-      public boolean hasL3() {
-        return l3Builder_ != null || l3_ != null;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       * @return The l3.
-       */
-      public context.ContextOuterClass.ConnectionSettings_L3 getL3() {
-        if (l3Builder_ == null) {
-          return l3_ == null ? context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
-        } else {
-          return l3Builder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder setL3(context.ContextOuterClass.ConnectionSettings_L3 value) {
-        if (l3Builder_ == null) {
+      public Builder addConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          l3_ = value;
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(index, value);
           onChanged();
         } else {
-          l3Builder_.setMessage(value);
+          connectionIdsBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder setL3(
-          context.ContextOuterClass.ConnectionSettings_L3.Builder builderForValue) {
-        if (l3Builder_ == null) {
-          l3_ = builderForValue.build();
+      public Builder addConnectionIds(
+          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(builderForValue.build());
           onChanged();
         } else {
-          l3Builder_.setMessage(builderForValue.build());
+          connectionIdsBuilder_.addMessage(builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder mergeL3(context.ContextOuterClass.ConnectionSettings_L3 value) {
-        if (l3Builder_ == null) {
-          if (l3_ != null) {
-            l3_ =
-              context.ContextOuterClass.ConnectionSettings_L3.newBuilder(l3_).mergeFrom(value).buildPartial();
-          } else {
-            l3_ = value;
-          }
+      public Builder addConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(index, builderForValue.build());
           onChanged();
         } else {
-          l3Builder_.mergeFrom(value);
+          connectionIdsBuilder_.addMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder clearL3() {
-        if (l3Builder_ == null) {
-          l3_ = null;
+      public Builder addAllConnectionIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ConnectionId> values) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, connectionIds_);
           onChanged();
         } else {
-          l3_ = null;
-          l3Builder_ = null;
+          connectionIdsBuilder_.addAllMessages(values);
         }
-
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       */
-      public context.ContextOuterClass.ConnectionSettings_L3.Builder getL3Builder() {
-        
-        onChanged();
-        return getL3FieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       */
-      public context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder() {
-        if (l3Builder_ != null) {
-          return l3Builder_.getMessageOrBuilder();
-        } else {
-          return l3_ == null ?
-              context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
-        }
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder> 
-          getL3FieldBuilder() {
-        if (l3Builder_ == null) {
-          l3Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder>(
-                  getL3(),
-                  getParentForChildren(),
-                  isClean());
-          l3_ = null;
-        }
-        return l3Builder_;
-      }
-
-      private context.ContextOuterClass.ConnectionSettings_L4 l4_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder> l4Builder_;
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       * @return Whether the l4 field is set.
-       */
-      public boolean hasL4() {
-        return l4Builder_ != null || l4_ != null;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       * @return The l4.
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionSettings_L4 getL4() {
-        if (l4Builder_ == null) {
-          return l4_ == null ? context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
+      public Builder clearConnectionIds() {
+        if (connectionIdsBuilder_ == null) {
+          connectionIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
         } else {
-          return l4Builder_.getMessage();
+          connectionIdsBuilder_.clear();
         }
+        return this;
       }
       /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder setL4(context.ContextOuterClass.ConnectionSettings_L4 value) {
-        if (l4Builder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          l4_ = value;
+      public Builder removeConnectionIds(int index) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.remove(index);
           onChanged();
         } else {
-          l4Builder_.setMessage(value);
+          connectionIdsBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder setL4(
-          context.ContextOuterClass.ConnectionSettings_L4.Builder builderForValue) {
-        if (l4Builder_ == null) {
-          l4_ = builderForValue.build();
-          onChanged();
-        } else {
-          l4Builder_.setMessage(builderForValue.build());
-        }
-
-        return this;
+      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdsBuilder(
+          int index) {
+        return getConnectionIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder mergeL4(context.ContextOuterClass.ConnectionSettings_L4 value) {
-        if (l4Builder_ == null) {
-          if (l4_ != null) {
-            l4_ =
-              context.ContextOuterClass.ConnectionSettings_L4.newBuilder(l4_).mergeFrom(value).buildPartial();
-          } else {
-            l4_ = value;
-          }
-          onChanged();
-        } else {
-          l4Builder_.mergeFrom(value);
+      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+          int index) {
+        if (connectionIdsBuilder_ == null) {
+          return connectionIds_.get(index);  } else {
+          return connectionIdsBuilder_.getMessageOrBuilder(index);
         }
-
-        return this;
       }
       /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder clearL4() {
-        if (l4Builder_ == null) {
-          l4_ = null;
-          onChanged();
+      public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+           getConnectionIdsOrBuilderList() {
+        if (connectionIdsBuilder_ != null) {
+          return connectionIdsBuilder_.getMessageOrBuilderList();
         } else {
-          l4_ = null;
-          l4Builder_ = null;
+          return java.util.Collections.unmodifiableList(connectionIds_);
         }
-
-        return this;
       }
       /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionSettings_L4.Builder getL4Builder() {
-        
-        onChanged();
-        return getL4FieldBuilder().getBuilder();
+      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder() {
+        return getConnectionIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ConnectionId.getDefaultInstance());
       }
       /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder() {
-        if (l4Builder_ != null) {
-          return l4Builder_.getMessageOrBuilder();
-        } else {
-          return l4_ == null ?
-              context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
-        }
+      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder(
+          int index) {
+        return getConnectionIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ConnectionId.getDefaultInstance());
       }
       /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder> 
-          getL4FieldBuilder() {
-        if (l4Builder_ == null) {
-          l4Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder>(
-                  getL4(),
+      public java.util.List<context.ContextOuterClass.ConnectionId.Builder> 
+           getConnectionIdsBuilderList() {
+        return getConnectionIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
+          getConnectionIdsFieldBuilder() {
+        if (connectionIdsBuilder_ == null) {
+          connectionIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
+                  connectionIds_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          l4_ = null;
+          connectionIds_ = null;
         }
-        return l4Builder_;
+        return connectionIdsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -42288,165 +52265,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionIdList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionSettings)
-    private static final context.ContextOuterClass.ConnectionSettings DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionIdList)
+    private static final context.ContextOuterClass.ConnectionIdList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionIdList();
     }
 
-    public static context.ContextOuterClass.ConnectionSettings getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionIdList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionSettings>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings>() {
+    private static final com.google.protobuf.Parser<ConnectionIdList>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionIdList>() {
       @java.lang.Override
-      public ConnectionSettings parsePartialFrom(
+      public ConnectionIdList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionSettings(input, extensionRegistry);
+        return new ConnectionIdList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionSettings> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionSettings> getParserForType() {
+    public static com.google.protobuf.Parser<ConnectionIdList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface ConnectionOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Connection)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     * @return Whether the connectionId field is set.
-     */
-    boolean hasConnectionId();
-    /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     * @return The connectionId.
-     */
-    context.ContextOuterClass.ConnectionId getConnectionId();
-    /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     */
-    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
+    public com.google.protobuf.Parser<ConnectionIdList> getParserForType() {
+      return PARSER;
+    }
 
-    /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return Whether the serviceId field is set.
-     */
-    boolean hasServiceId();
-    /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return The serviceId.
-     */
-    context.ContextOuterClass.ServiceId getServiceId();
-    /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     */
-    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
 
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    java.util.List<context.ContextOuterClass.EndPointId> 
-        getPathHopsEndpointIdsList();
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index);
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    int getPathHopsEndpointIdsCount();
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getPathHopsEndpointIdsOrBuilderList();
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
-        int index);
+  }
+
+  public interface ConnectionListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionList)
+      com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    java.util.List<context.ContextOuterClass.ServiceId> 
-        getSubServiceIdsList();
+    java.util.List<context.ContextOuterClass.Connection> 
+        getConnectionsList();
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    context.ContextOuterClass.ServiceId getSubServiceIds(int index);
+    context.ContextOuterClass.Connection getConnections(int index);
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    int getSubServiceIdsCount();
+    int getConnectionsCount();
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getSubServiceIdsOrBuilderList();
+    java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+        getConnectionsOrBuilderList();
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
+    context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
         int index);
-
-    /**
-     * <code>.context.ConnectionSettings settings = 5;</code>
-     * @return Whether the settings field is set.
-     */
-    boolean hasSettings();
-    /**
-     * <code>.context.ConnectionSettings settings = 5;</code>
-     * @return The settings.
-     */
-    context.ContextOuterClass.ConnectionSettings getSettings();
-    /**
-     * <code>.context.ConnectionSettings settings = 5;</code>
-     */
-    context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder();
   }
   /**
-   * Protobuf type {@code context.Connection}
+   * Protobuf type {@code context.ConnectionList}
    */
-  public static final class Connection extends
+  public static final class ConnectionList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Connection)
-      ConnectionOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionList)
+      ConnectionListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Connection.newBuilder() to construct.
-    private Connection(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionList.newBuilder() to construct.
+    private ConnectionList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Connection() {
-      pathHopsEndpointIds_ = java.util.Collections.emptyList();
-      subServiceIds_ = java.util.Collections.emptyList();
+    private ConnectionList() {
+      connections_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Connection();
+      return new ConnectionList();
     }
 
     @java.lang.Override
@@ -42454,7 +52361,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Connection(
+    private ConnectionList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -42474,60 +52381,12 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
-              if (connectionId_ != null) {
-                subBuilder = connectionId_.toBuilder();
-              }
-              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(connectionId_);
-                connectionId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
-              if (serviceId_ != null) {
-                subBuilder = serviceId_.toBuilder();
-              }
-              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(serviceId_);
-                serviceId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 26: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                pathHopsEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
+                connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              pathHopsEndpointIds_.add(
-                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
-              break;
-            }
-            case 34: {
-              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                subServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
-                mutable_bitField0_ |= 0x00000002;
-              }
-              subServiceIds_.add(
-                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
-              break;
-            }
-            case 42: {
-              context.ContextOuterClass.ConnectionSettings.Builder subBuilder = null;
-              if (settings_ != null) {
-                subBuilder = settings_.toBuilder();
-              }
-              settings_ = input.readMessage(context.ContextOuterClass.ConnectionSettings.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(settings_);
-                settings_ = subBuilder.buildPartial();
-              }
-
+              connections_.add(
+                  input.readMessage(context.ContextOuterClass.Connection.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -42546,10 +52405,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          pathHopsEndpointIds_ = java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
-        }
-        if (((mutable_bitField0_ & 0x00000002) != 0)) {
-          subServiceIds_ = java.util.Collections.unmodifiableList(subServiceIds_);
+          connections_ = java.util.Collections.unmodifiableList(connections_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -42557,173 +52413,58 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
-    }
-
-    public static final int CONNECTION_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.ConnectionId connectionId_;
-    /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     * @return Whether the connectionId field is set.
-     */
-    @java.lang.Override
-    public boolean hasConnectionId() {
-      return connectionId_ != null;
-    }
-    /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     * @return The connectionId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getConnectionId() {
-      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
-    }
-    /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-      return getConnectionId();
-    }
-
-    public static final int SERVICE_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.ServiceId serviceId_;
-    /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return Whether the serviceId field is set.
-     */
-    @java.lang.Override
-    public boolean hasServiceId() {
-      return serviceId_ != null;
-    }
-    /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return The serviceId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceId getServiceId() {
-      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
-    }
-    /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-      return getServiceId();
+              context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
     }
 
-    public static final int PATH_HOPS_ENDPOINT_IDS_FIELD_NUMBER = 3;
-    private java.util.List<context.ContextOuterClass.EndPointId> pathHopsEndpointIds_;
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.EndPointId> getPathHopsEndpointIdsList() {
-      return pathHopsEndpointIds_;
-    }
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getPathHopsEndpointIdsOrBuilderList() {
-      return pathHopsEndpointIds_;
-    }
+    public static final int CONNECTIONS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Connection> connections_;
     /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public int getPathHopsEndpointIdsCount() {
-      return pathHopsEndpointIds_.size();
+    public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
+      return connections_;
     }
     /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index) {
-      return pathHopsEndpointIds_.get(index);
+    public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+        getConnectionsOrBuilderList() {
+      return connections_;
     }
     /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
-        int index) {
-      return pathHopsEndpointIds_.get(index);
+    public int getConnectionsCount() {
+      return connections_.size();
     }
 
-    public static final int SUB_SERVICE_IDS_FIELD_NUMBER = 4;
-    private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_;
-    /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ServiceId> getSubServiceIdsList() {
-      return subServiceIds_;
-    }
-    /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getSubServiceIdsOrBuilderList() {
-      return subServiceIds_;
-    }
-    /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
-    @java.lang.Override
-    public int getSubServiceIdsCount() {
-      return subServiceIds_.size();
-    }
+    public static final int CONNECTIONS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Connection> connections_;
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
-      return subServiceIds_.get(index);
+    public context.ContextOuterClass.Connection getConnections(int index) {
+      return connections_.get(index);
     }
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
+    public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
         int index) {
-      return subServiceIds_.get(index);
-    }
-
-    public static final int SETTINGS_FIELD_NUMBER = 5;
-    private context.ContextOuterClass.ConnectionSettings settings_;
-    /**
-     * <code>.context.ConnectionSettings settings = 5;</code>
-     * @return Whether the settings field is set.
-     */
-    @java.lang.Override
-    public boolean hasSettings() {
-      return settings_ != null;
-    }
-    /**
-     * <code>.context.ConnectionSettings settings = 5;</code>
-     * @return The settings.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings getSettings() {
-      return settings_ == null ? context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
-    }
-    /**
-     * <code>.context.ConnectionSettings settings = 5;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder() {
-      return getSettings();
+      return connections_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -42740,20 +52481,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (connectionId_ != null) {
-        output.writeMessage(1, getConnectionId());
-      }
-      if (serviceId_ != null) {
-        output.writeMessage(2, getServiceId());
-      }
-      for (int i = 0; i < pathHopsEndpointIds_.size(); i++) {
-        output.writeMessage(3, pathHopsEndpointIds_.get(i));
-      }
-      for (int i = 0; i < subServiceIds_.size(); i++) {
-        output.writeMessage(4, subServiceIds_.get(i));
-      }
-      if (settings_ != null) {
-        output.writeMessage(5, getSettings());
+      for (int i = 0; i < connections_.size(); i++) {
+        output.writeMessage(1, connections_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -42764,25 +52493,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (connectionId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getConnectionId());
-      }
-      if (serviceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getServiceId());
-      }
-      for (int i = 0; i < pathHopsEndpointIds_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, pathHopsEndpointIds_.get(i));
-      }
-      for (int i = 0; i < subServiceIds_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, subServiceIds_.get(i));
-      }
-      if (settings_ != null) {
+      for (int i = 0; i < connections_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, getSettings());
+          .computeMessageSize(1, connections_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -42794,30 +52507,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Connection)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Connection other = (context.ContextOuterClass.Connection) obj;
+      context.ContextOuterClass.ConnectionList other = (context.ContextOuterClass.ConnectionList) obj;
 
-      if (hasConnectionId() != other.hasConnectionId()) return false;
-      if (hasConnectionId()) {
-        if (!getConnectionId()
-            .equals(other.getConnectionId())) return false;
-      }
-      if (hasServiceId() != other.hasServiceId()) return false;
-      if (hasServiceId()) {
-        if (!getServiceId()
-            .equals(other.getServiceId())) return false;
-      }
-      if (!getPathHopsEndpointIdsList()
-          .equals(other.getPathHopsEndpointIdsList())) return false;
-      if (!getSubServiceIdsList()
-          .equals(other.getSubServiceIdsList())) return false;
-      if (hasSettings() != other.hasSettings()) return false;
-      if (hasSettings()) {
-        if (!getSettings()
-            .equals(other.getSettings())) return false;
-      }
+      if (!getConnectionsList()
+          .equals(other.getConnectionsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -42829,94 +52525,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasConnectionId()) {
-        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionId().hashCode();
-      }
-      if (hasServiceId()) {
-        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceId().hashCode();
-      }
-      if (getPathHopsEndpointIdsCount() > 0) {
-        hash = (37 * hash) + PATH_HOPS_ENDPOINT_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getPathHopsEndpointIdsList().hashCode();
-      }
-      if (getSubServiceIdsCount() > 0) {
-        hash = (37 * hash) + SUB_SERVICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getSubServiceIdsList().hashCode();
-      }
-      if (hasSettings()) {
-        hash = (37 * hash) + SETTINGS_FIELD_NUMBER;
-        hash = (53 * hash) + getSettings().hashCode();
+      if (getConnectionsCount() > 0) {
+        hash = (37 * hash) + CONNECTIONS_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionsList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Connection parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -42929,7 +52609,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Connection prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -42945,26 +52625,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Connection}
+     * Protobuf type {@code context.ConnectionList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Connection)
-        context.ContextOuterClass.ConnectionOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionList)
+        context.ContextOuterClass.ConnectionListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
+                context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Connection.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -42977,42 +52657,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getPathHopsEndpointIdsFieldBuilder();
-          getSubServiceIdsFieldBuilder();
+          getConnectionsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = null;
-        } else {
-          connectionId_ = null;
-          connectionIdBuilder_ = null;
-        }
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
-        } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
-        }
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          pathHopsEndpointIds_ = java.util.Collections.emptyList();
+        if (connectionsBuilder_ == null) {
+          connections_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          pathHopsEndpointIdsBuilder_.clear();
-        }
-        if (subServiceIdsBuilder_ == null) {
-          subServiceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
-        } else {
-          subServiceIdsBuilder_.clear();
-        }
-        if (settingsBuilder_ == null) {
-          settings_ = null;
-        } else {
-          settings_ = null;
-          settingsBuilder_ = null;
+          connectionsBuilder_.clear();
         }
         return this;
       }
@@ -43020,59 +52675,35 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Connection getDefaultInstanceForType() {
-        return context.ContextOuterClass.Connection.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Connection build() {
-        context.ContextOuterClass.Connection result = buildPartial();
+      public context.ContextOuterClass.ConnectionList build() {
+        context.ContextOuterClass.ConnectionList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
-      }
-
-      @java.lang.Override
-      public context.ContextOuterClass.Connection buildPartial() {
-        context.ContextOuterClass.Connection result = new context.ContextOuterClass.Connection(this);
-        int from_bitField0_ = bitField0_;
-        if (connectionIdBuilder_ == null) {
-          result.connectionId_ = connectionId_;
-        } else {
-          result.connectionId_ = connectionIdBuilder_.build();
-        }
-        if (serviceIdBuilder_ == null) {
-          result.serviceId_ = serviceId_;
-        } else {
-          result.serviceId_ = serviceIdBuilder_.build();
-        }
-        if (pathHopsEndpointIdsBuilder_ == null) {
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionList buildPartial() {
+        context.ContextOuterClass.ConnectionList result = new context.ContextOuterClass.ConnectionList(this);
+        int from_bitField0_ = bitField0_;
+        if (connectionsBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            pathHopsEndpointIds_ = java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+            connections_ = java.util.Collections.unmodifiableList(connections_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.pathHopsEndpointIds_ = pathHopsEndpointIds_;
-        } else {
-          result.pathHopsEndpointIds_ = pathHopsEndpointIdsBuilder_.build();
-        }
-        if (subServiceIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) != 0)) {
-            subServiceIds_ = java.util.Collections.unmodifiableList(subServiceIds_);
-            bitField0_ = (bitField0_ & ~0x00000002);
-          }
-          result.subServiceIds_ = subServiceIds_;
-        } else {
-          result.subServiceIds_ = subServiceIdsBuilder_.build();
-        }
-        if (settingsBuilder_ == null) {
-          result.settings_ = settings_;
+          result.connections_ = connections_;
         } else {
-          result.settings_ = settingsBuilder_.build();
+          result.connections_ = connectionsBuilder_.build();
         }
         onBuilt();
         return result;
@@ -43112,77 +52743,42 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Connection) {
-          return mergeFrom((context.ContextOuterClass.Connection)other);
+        if (other instanceof context.ContextOuterClass.ConnectionList) {
+          return mergeFrom((context.ContextOuterClass.ConnectionList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Connection other) {
-        if (other == context.ContextOuterClass.Connection.getDefaultInstance()) return this;
-        if (other.hasConnectionId()) {
-          mergeConnectionId(other.getConnectionId());
-        }
-        if (other.hasServiceId()) {
-          mergeServiceId(other.getServiceId());
-        }
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          if (!other.pathHopsEndpointIds_.isEmpty()) {
-            if (pathHopsEndpointIds_.isEmpty()) {
-              pathHopsEndpointIds_ = other.pathHopsEndpointIds_;
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionList other) {
+        if (other == context.ContextOuterClass.ConnectionList.getDefaultInstance()) return this;
+        if (connectionsBuilder_ == null) {
+          if (!other.connections_.isEmpty()) {
+            if (connections_.isEmpty()) {
+              connections_ = other.connections_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensurePathHopsEndpointIdsIsMutable();
-              pathHopsEndpointIds_.addAll(other.pathHopsEndpointIds_);
+              ensureConnectionsIsMutable();
+              connections_.addAll(other.connections_);
             }
             onChanged();
           }
         } else {
-          if (!other.pathHopsEndpointIds_.isEmpty()) {
-            if (pathHopsEndpointIdsBuilder_.isEmpty()) {
-              pathHopsEndpointIdsBuilder_.dispose();
-              pathHopsEndpointIdsBuilder_ = null;
-              pathHopsEndpointIds_ = other.pathHopsEndpointIds_;
+          if (!other.connections_.isEmpty()) {
+            if (connectionsBuilder_.isEmpty()) {
+              connectionsBuilder_.dispose();
+              connectionsBuilder_ = null;
+              connections_ = other.connections_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              pathHopsEndpointIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getPathHopsEndpointIdsFieldBuilder() : null;
-            } else {
-              pathHopsEndpointIdsBuilder_.addAllMessages(other.pathHopsEndpointIds_);
-            }
-          }
-        }
-        if (subServiceIdsBuilder_ == null) {
-          if (!other.subServiceIds_.isEmpty()) {
-            if (subServiceIds_.isEmpty()) {
-              subServiceIds_ = other.subServiceIds_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-            } else {
-              ensureSubServiceIdsIsMutable();
-              subServiceIds_.addAll(other.subServiceIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.subServiceIds_.isEmpty()) {
-            if (subServiceIdsBuilder_.isEmpty()) {
-              subServiceIdsBuilder_.dispose();
-              subServiceIdsBuilder_ = null;
-              subServiceIds_ = other.subServiceIds_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-              subServiceIdsBuilder_ = 
+              connectionsBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSubServiceIdsFieldBuilder() : null;
+                   getConnectionsFieldBuilder() : null;
             } else {
-              subServiceIdsBuilder_.addAllMessages(other.subServiceIds_);
+              connectionsBuilder_.addAllMessages(other.connections_);
             }
           }
         }
-        if (other.hasSettings()) {
-          mergeSettings(other.getSettings());
-        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -43198,11 +52794,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Connection parsedMessage = null;
+        context.ContextOuterClass.ConnectionList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Connection) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -43213,841 +52809,1077 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private context.ContextOuterClass.ConnectionId connectionId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
-      /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       * @return Whether the connectionId field is set.
-       */
-      public boolean hasConnectionId() {
-        return connectionIdBuilder_ != null || connectionId_ != null;
-      }
-      /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       * @return The connectionId.
-       */
-      public context.ContextOuterClass.ConnectionId getConnectionId() {
-        if (connectionIdBuilder_ == null) {
-          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
-        } else {
-          return connectionIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       */
-      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          connectionId_ = value;
-          onChanged();
-        } else {
-          connectionIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       */
-      public Builder setConnectionId(
-          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = builderForValue.build();
-          onChanged();
-        } else {
-          connectionIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       */
-      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdBuilder_ == null) {
-          if (connectionId_ != null) {
-            connectionId_ =
-              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
-          } else {
-            connectionId_ = value;
-          }
-          onChanged();
-        } else {
-          connectionIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       */
-      public Builder clearConnectionId() {
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = null;
-          onChanged();
-        } else {
-          connectionId_ = null;
-          connectionIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       */
-      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
-        
-        onChanged();
-        return getConnectionIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       */
-      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-        if (connectionIdBuilder_ != null) {
-          return connectionIdBuilder_.getMessageOrBuilder();
-        } else {
-          return connectionId_ == null ?
-              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
-        }
-      }
-      /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
-          getConnectionIdFieldBuilder() {
-        if (connectionIdBuilder_ == null) {
-          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
-                  getConnectionId(),
-                  getParentForChildren(),
-                  isClean());
-          connectionId_ = null;
-        }
-        return connectionIdBuilder_;
-      }
-
-      private context.ContextOuterClass.ServiceId serviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
-      /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       * @return Whether the serviceId field is set.
-       */
-      public boolean hasServiceId() {
-        return serviceIdBuilder_ != null || serviceId_ != null;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       * @return The serviceId.
-       */
-      public context.ContextOuterClass.ServiceId getServiceId() {
-        if (serviceIdBuilder_ == null) {
-          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
-        } else {
-          return serviceIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       */
-      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          serviceId_ = value;
-          onChanged();
-        } else {
-          serviceIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       */
-      public Builder setServiceId(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = builderForValue.build();
-          onChanged();
-        } else {
-          serviceIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       */
-      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
-          if (serviceId_ != null) {
-            serviceId_ =
-              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
-          } else {
-            serviceId_ = value;
-          }
-          onChanged();
-        } else {
-          serviceIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       */
-      public Builder clearServiceId() {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
-          onChanged();
-        } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
-        
-        onChanged();
-        return getServiceIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       */
-      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-        if (serviceIdBuilder_ != null) {
-          return serviceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return serviceId_ == null ?
-              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
-        }
-      }
-      /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getServiceIdFieldBuilder() {
-        if (serviceIdBuilder_ == null) {
-          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  getServiceId(),
-                  getParentForChildren(),
-                  isClean());
-          serviceId_ = null;
-        }
-        return serviceIdBuilder_;
-      }
-
-      private java.util.List<context.ContextOuterClass.EndPointId> pathHopsEndpointIds_ =
+      private java.util.List<context.ContextOuterClass.Connection> connections_ =
         java.util.Collections.emptyList();
-      private void ensurePathHopsEndpointIdsIsMutable() {
+      private void ensureConnectionsIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          pathHopsEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(pathHopsEndpointIds_);
+          connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>(connections_);
           bitField0_ |= 0x00000001;
          }
       }
+      if (hasConnectionId()) {
+        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionId().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> pathHopsEndpointIdsBuilder_;
+          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> connectionsBuilder_;
 
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.EndPointId> getPathHopsEndpointIdsList() {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+      public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
+        if (connectionsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(connections_);
         } else {
-          return pathHopsEndpointIdsBuilder_.getMessageList();
+          return connectionsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public int getPathHopsEndpointIdsCount() {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          return pathHopsEndpointIds_.size();
+      public int getConnectionsCount() {
+        if (connectionsBuilder_ == null) {
+          return connections_.size();
         } else {
-          return pathHopsEndpointIdsBuilder_.getCount();
+          return connectionsBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          return pathHopsEndpointIds_.get(index);
+      public context.ContextOuterClass.Connection getConnections(int index) {
+        if (connectionsBuilder_ == null) {
+          return connections_.get(index);
         } else {
-          return pathHopsEndpointIdsBuilder_.getMessage(index);
+          return connectionsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder setPathHopsEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
+      public Builder setConnections(
+          int index, context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.set(index, value);
+          ensureConnectionsIsMutable();
+          connections_.set(index, value);
           onChanged();
         } else {
-          pathHopsEndpointIdsBuilder_.setMessage(index, value);
+          connectionsBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder setPathHopsEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.set(index, builderForValue.build());
+      public Builder setConnections(
+          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.set(index, builderForValue.build());
           onChanged();
         } else {
-          pathHopsEndpointIdsBuilder_.setMessage(index, builderForValue.build());
+          connectionsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder addPathHopsEndpointIds(context.ContextOuterClass.EndPointId value) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
+      public Builder addConnections(context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.add(value);
+          ensureConnectionsIsMutable();
+          connections_.add(value);
           onChanged();
         } else {
-          pathHopsEndpointIdsBuilder_.addMessage(value);
+          connectionsBuilder_.addMessage(value);
         }
-        return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder addPathHopsEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
+      public Builder addConnections(
+          int index, context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.add(index, value);
+          ensureConnectionsIsMutable();
+          connections_.add(index, value);
           onChanged();
         } else {
-          pathHopsEndpointIdsBuilder_.addMessage(index, value);
+          connectionsBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder addPathHopsEndpointIds(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.add(builderForValue.build());
+      public Builder addConnections(
+          context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.add(builderForValue.build());
           onChanged();
         } else {
-          pathHopsEndpointIdsBuilder_.addMessage(builderForValue.build());
+          connectionsBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder addPathHopsEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.add(index, builderForValue.build());
+      public Builder addConnections(
+          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.add(index, builderForValue.build());
           onChanged();
         } else {
-          pathHopsEndpointIdsBuilder_.addMessage(index, builderForValue.build());
+          connectionsBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder addAllPathHopsEndpointIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
+      public Builder addAllConnections(
+          java.lang.Iterable<? extends context.ContextOuterClass.Connection> values) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, pathHopsEndpointIds_);
+              values, connections_);
           onChanged();
         } else {
-          pathHopsEndpointIdsBuilder_.addAllMessages(values);
+          connectionsBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder clearPathHopsEndpointIds() {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          pathHopsEndpointIds_ = java.util.Collections.emptyList();
+      public Builder clearConnections() {
+        if (connectionsBuilder_ == null) {
+          connections_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          pathHopsEndpointIdsBuilder_.clear();
+          connectionsBuilder_.clear();
         }
-        return this;
+        return result;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder removePathHopsEndpointIds(int index) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.remove(index);
+      public Builder removeConnections(int index) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.remove(index);
           onChanged();
         } else {
-          pathHopsEndpointIdsBuilder_.remove(index);
+          connectionsBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder getPathHopsEndpointIdsBuilder(
+      public context.ContextOuterClass.Connection.Builder getConnectionsBuilder(
           int index) {
-        return getPathHopsEndpointIdsFieldBuilder().getBuilder(index);
+        return getConnectionsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
+      public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
           int index) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          return pathHopsEndpointIds_.get(index);  } else {
-          return pathHopsEndpointIdsBuilder_.getMessageOrBuilder(index);
+        if (connectionsBuilder_ == null) {
+          return connections_.get(index);  } else {
+          return connectionsBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-           getPathHopsEndpointIdsOrBuilderList() {
-        if (pathHopsEndpointIdsBuilder_ != null) {
-          return pathHopsEndpointIdsBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+           getConnectionsOrBuilderList() {
+        if (connectionsBuilder_ != null) {
+          return connectionsBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+          return java.util.Collections.unmodifiableList(connections_);
         }
+        onBuilt();
+        return result;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder addPathHopsEndpointIdsBuilder() {
-        return getPathHopsEndpointIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder() {
+        return getConnectionsFieldBuilder().addBuilder(
+            context.ContextOuterClass.Connection.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder addPathHopsEndpointIdsBuilder(
+      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder(
           int index) {
-        return getPathHopsEndpointIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+        return getConnectionsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Connection.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
-           getPathHopsEndpointIdsBuilderList() {
-        return getPathHopsEndpointIdsFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.Connection.Builder> 
+           getConnectionsBuilderList() {
+        return getConnectionsFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getPathHopsEndpointIdsFieldBuilder() {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          pathHopsEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  pathHopsEndpointIds_,
+          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> 
+          getConnectionsFieldBuilder() {
+        if (connectionsBuilder_ == null) {
+          connectionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder>(
+                  connections_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          pathHopsEndpointIds_ = null;
+          connections_ = null;
+        }
+        return connectionsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ConnectionList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ConnectionList)
+    private static final context.ContextOuterClass.ConnectionList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionList();
+    }
+
+    public static context.ContextOuterClass.ConnectionList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ConnectionList>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionList>() {
+      @java.lang.Override
+      public ConnectionList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ConnectionList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ConnectionList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ConnectionList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ConnectionEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionEvent)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    boolean hasEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    context.ContextOuterClass.Event getEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
+    /**
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return Whether the connectionId field is set.
+     */
+    boolean hasConnectionId();
+    /**
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return The connectionId.
+     */
+    context.ContextOuterClass.ConnectionId getConnectionId();
+    /**
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     */
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
+  }
+  /**
+   * Protobuf type {@code context.ConnectionEvent}
+   */
+  public static final class ConnectionEvent extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ConnectionEvent)
+      ConnectionEventOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ConnectionEvent.newBuilder() to construct.
+    private ConnectionEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ConnectionEvent() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ConnectionEvent();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ConnectionEvent(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
+              }
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
+              if (connectionId_ != null) {
+                subBuilder = connectionId_.toBuilder();
+              }
+              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(connectionId_);
+                connectionId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ConnectionEvent_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
+    }
+
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    @java.lang.Override
+    public boolean hasEvent() {
+      return event_ != null;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
+    }
+
+    public static final int CONNECTION_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ConnectionId connectionId_;
+    /**
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return Whether the connectionId field is set.
+     */
+    @java.lang.Override
+    public boolean hasConnectionId() {
+      return connectionId_ != null;
+    }
+    /**
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return The connectionId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionId getConnectionId() {
+      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+    }
+    /**
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+      return getConnectionId();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (connectionId_ != null) {
+        output.writeMessage(2, getConnectionId());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (event_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getEvent());
+      }
+      if (connectionId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getConnectionId());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ConnectionEvent)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ConnectionEvent other = (context.ContextOuterClass.ConnectionEvent) obj;
+
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasConnectionId() != other.hasConnectionId()) return false;
+      if (hasConnectionId()) {
+        if (!getConnectionId()
+            .equals(other.getConnectionId())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (hasConnectionId()) {
+        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionId().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionEvent parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionEvent parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionEvent prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ConnectionEvent}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ConnectionEvent)
+        context.ContextOuterClass.ConnectionEventOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ConnectionEvent_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ConnectionEvent.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
         }
-        return pathHopsEndpointIdsBuilder_;
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (eventBuilder_ == null) {
+          event_ = null;
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+        } else {
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
+        }
+        return this;
       }
 
-      private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_ =
-        java.util.Collections.emptyList();
-      private void ensureSubServiceIdsIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
-          subServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(subServiceIds_);
-          bitField0_ |= 0x00000002;
-         }
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
       }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> subServiceIdsBuilder_;
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionEvent.getDefaultInstance();
+      }
 
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public java.util.List<context.ContextOuterClass.ServiceId> getSubServiceIdsList() {
-        if (subServiceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(subServiceIds_);
-        } else {
-          return subServiceIdsBuilder_.getMessageList();
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionEvent build() {
+        context.ContextOuterClass.ConnectionEvent result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
+        return result;
       }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public int getSubServiceIdsCount() {
-        if (subServiceIdsBuilder_ == null) {
-          return subServiceIds_.size();
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionEvent buildPartial() {
+        context.ContextOuterClass.ConnectionEvent result = new context.ContextOuterClass.ConnectionEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
         } else {
-          return subServiceIdsBuilder_.getCount();
+          result.event_ = eventBuilder_.build();
         }
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
-        if (subServiceIdsBuilder_ == null) {
-          return subServiceIds_.get(index);
+        if (connectionIdBuilder_ == null) {
+          result.connectionId_ = connectionId_;
         } else {
-          return subServiceIdsBuilder_.getMessage(index);
+          result.connectionId_ = connectionIdBuilder_.build();
         }
+        onBuilt();
+        return result;
       }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public Builder setSubServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (subServiceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.set(index, value);
-          onChanged();
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ConnectionEvent) {
+          return mergeFrom((context.ContextOuterClass.ConnectionEvent)other);
         } else {
-          subServiceIdsBuilder_.setMessage(index, value);
+          super.mergeFrom(other);
+          return this;
         }
-        return this;
       }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public Builder setSubServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.setMessage(index, builderForValue.build());
+
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionEvent other) {
+        if (other == context.ContextOuterClass.ConnectionEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (other.hasConnectionId()) {
+          mergeConnectionId(other.getConnectionId());
         }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
         return this;
       }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public Builder addSubServiceIds(context.ContextOuterClass.ServiceId value) {
-        if (subServiceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ConnectionEvent parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ConnectionEvent) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.add(value);
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.addMessage(value);
         }
         return this;
       }
+
+      private context.ContextOuterClass.Event event_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
        */
-      public Builder addSubServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (subServiceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.add(index, value);
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.addMessage(index, value);
-        }
-        return this;
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
        */
-      public Builder addSubServiceIds(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.add(builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         } else {
-          subServiceIdsBuilder_.addMessage(builderForValue.build());
+          return eventBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addSubServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.add(index, builderForValue.build());
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          event_ = value;
           onChanged();
         } else {
-          subServiceIdsBuilder_.addMessage(index, builderForValue.build());
+          eventBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addAllSubServiceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, subServiceIds_);
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
           onChanged();
         } else {
-          subServiceIdsBuilder_.addAllMessages(values);
+          eventBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder clearSubServiceIds() {
-        if (subServiceIdsBuilder_ == null) {
-          subServiceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
+      public Builder mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+          } else {
+            event_ = value;
+          }
           onChanged();
         } else {
-          subServiceIdsBuilder_.clear();
+          eventBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder removeSubServiceIds(int index) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.remove(index);
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
           onChanged();
         } else {
-          subServiceIdsBuilder_.remove(index);
+          event_ = null;
+          eventBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder getSubServiceIdsBuilder(
-          int index) {
-        return getSubServiceIdsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
-          int index) {
-        if (subServiceIdsBuilder_ == null) {
-          return subServiceIds_.get(index);  } else {
-          return subServiceIdsBuilder_.getMessageOrBuilder(index);
-        }
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+        
+        onChanged();
+        return getEventFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-           getSubServiceIdsOrBuilderList() {
-        if (subServiceIdsBuilder_ != null) {
-          return subServiceIdsBuilder_.getMessageOrBuilderList();
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
         } else {
-          return java.util.Collections.unmodifiableList(subServiceIds_);
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder addSubServiceIdsBuilder() {
-        return getSubServiceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.ServiceId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder addSubServiceIdsBuilder(
-          int index) {
-        return getSubServiceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
-           getSubServiceIdsBuilderList() {
-        return getSubServiceIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getSubServiceIdsFieldBuilder() {
-        if (subServiceIdsBuilder_ == null) {
-          subServiceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  subServiceIds_,
-                  ((bitField0_ & 0x00000002) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
+          getEventFieldBuilder() {
+        if (eventBuilder_ == null) {
+          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
+                  getEvent(),
                   getParentForChildren(),
                   isClean());
-          subServiceIds_ = null;
+          event_ = null;
         }
-        return subServiceIdsBuilder_;
+        return eventBuilder_;
       }
 
-      private context.ContextOuterClass.ConnectionSettings settings_;
+      private context.ContextOuterClass.ConnectionId connectionId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder> settingsBuilder_;
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
-       * @return Whether the settings field is set.
+       * <code>.context.ConnectionId connection_id = 2;</code>
+       * @return Whether the connectionId field is set.
        */
-      public boolean hasSettings() {
-        return settingsBuilder_ != null || settings_ != null;
+      public boolean hasConnectionId() {
+        return connectionIdBuilder_ != null || connectionId_ != null;
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
-       * @return The settings.
+       * <code>.context.ConnectionId connection_id = 2;</code>
+       * @return The connectionId.
        */
-      public context.ContextOuterClass.ConnectionSettings getSettings() {
-        if (settingsBuilder_ == null) {
-          return settings_ == null ? context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
+      public context.ContextOuterClass.ConnectionId getConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
         } else {
-          return settingsBuilder_.getMessage();
+          return connectionIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public Builder setSettings(context.ContextOuterClass.ConnectionSettings value) {
-        if (settingsBuilder_ == null) {
+      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          settings_ = value;
+          connectionId_ = value;
           onChanged();
         } else {
-          settingsBuilder_.setMessage(value);
+          connectionIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public Builder setSettings(
-          context.ContextOuterClass.ConnectionSettings.Builder builderForValue) {
-        if (settingsBuilder_ == null) {
-          settings_ = builderForValue.build();
+      public Builder setConnectionId(
+          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = builderForValue.build();
           onChanged();
         } else {
-          settingsBuilder_.setMessage(builderForValue.build());
+          connectionIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public Builder mergeSettings(context.ContextOuterClass.ConnectionSettings value) {
-        if (settingsBuilder_ == null) {
-          if (settings_ != null) {
-            settings_ =
-              context.ContextOuterClass.ConnectionSettings.newBuilder(settings_).mergeFrom(value).buildPartial();
+      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (connectionId_ != null) {
+            connectionId_ =
+              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
           } else {
-            settings_ = value;
+            connectionId_ = value;
           }
           onChanged();
         } else {
-          settingsBuilder_.mergeFrom(value);
+          connectionIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public Builder clearSettings() {
-        if (settingsBuilder_ == null) {
-          settings_ = null;
+      public Builder clearConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
           onChanged();
         } else {
-          settings_ = null;
-          settingsBuilder_ = null;
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public context.ContextOuterClass.ConnectionSettings.Builder getSettingsBuilder() {
+      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
         
         onChanged();
-        return getSettingsFieldBuilder().getBuilder();
+        return getConnectionIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder() {
-        if (settingsBuilder_ != null) {
-          return settingsBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+        if (connectionIdBuilder_ != null) {
+          return connectionIdBuilder_.getMessageOrBuilder();
         } else {
-          return settings_ == null ?
-              context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
+          return connectionId_ == null ?
+              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
         }
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder> 
-          getSettingsFieldBuilder() {
-        if (settingsBuilder_ == null) {
-          settingsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder>(
-                  getSettings(),
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
+          getConnectionIdFieldBuilder() {
+        if (connectionIdBuilder_ == null) {
+          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
+                  getConnectionId(),
                   getParentForChildren(),
                   isClean());
-          settings_ = null;
+          connectionId_ = null;
         }
-        return settingsBuilder_;
+        return connectionIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -44062,95 +53894,119 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Connection)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionEvent)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Connection)
-    private static final context.ContextOuterClass.Connection DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionEvent)
+    private static final context.ContextOuterClass.ConnectionEvent DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Connection();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionEvent();
     }
 
-    public static context.ContextOuterClass.Connection getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionEvent getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Connection>
-        PARSER = new com.google.protobuf.AbstractParser<Connection>() {
+    private static final com.google.protobuf.Parser<ConnectionEvent>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionEvent>() {
       @java.lang.Override
-      public Connection parsePartialFrom(
+      public ConnectionEvent parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Connection(input, extensionRegistry);
+        return new ConnectionEvent(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Connection> parser() {
+    public static com.google.protobuf.Parser<ConnectionEvent> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Connection> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionEvent> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Connection getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionIdList)
+  public interface EndPointIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.EndPointId)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return Whether the topologyId field is set.
+     */
+    boolean hasTopologyId();
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return The topologyId.
+     */
+    context.ContextOuterClass.TopologyId getTopologyId();
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     */
+    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
+
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return Whether the deviceId field is set.
+     */
+    boolean hasDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return The deviceId.
      */
-    java.util.List<context.ContextOuterClass.ConnectionId> 
-        getConnectionIdsList();
+    context.ContextOuterClass.DeviceId getDeviceId();
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>.context.DeviceId device_id = 2;</code>
      */
-    context.ContextOuterClass.ConnectionId getConnectionIds(int index);
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return Whether the endpointUuid field is set.
      */
-    int getConnectionIdsCount();
+    boolean hasEndpointUuid();
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return The endpointUuid.
      */
-    java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
-        getConnectionIdsOrBuilderList();
+    context.ContextOuterClass.Uuid getEndpointUuid();
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
      */
-    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
-        int index);
+    context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder();
   }
   /**
-   * Protobuf type {@code context.ConnectionIdList}
+   * <pre>
+   * ----- Endpoint ------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.EndPointId}
    */
-  public static final class ConnectionIdList extends
+  public static final class EndPointId extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionIdList)
-      ConnectionIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.EndPointId)
+      EndPointIdOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionIdList.newBuilder() to construct.
-    private ConnectionIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use EndPointId.newBuilder() to construct.
+    private EndPointId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionIdList() {
-      connectionIds_ = java.util.Collections.emptyList();
+    private EndPointId() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionIdList();
+      return new EndPointId();
     }
 
     @java.lang.Override
@@ -44158,7 +54014,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionIdList(
+    private EndPointId(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -44166,7 +54022,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -44178,12 +54033,42 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>();
-                mutable_bitField0_ |= 0x00000001;
+              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
+              if (topologyId_ != null) {
+                subBuilder = topologyId_.toBuilder();
               }
-              connectionIds_.add(
-                  input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry));
+              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(topologyId_);
+                topologyId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
+              if (deviceId_ != null) {
+                subBuilder = deviceId_.toBuilder();
+              }
+              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(deviceId_);
+                deviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 26: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (endpointUuid_ != null) {
+                subBuilder = endpointUuid_.toBuilder();
+              }
+              endpointUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointUuid_);
+                endpointUuid_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -44201,64 +54086,102 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+      return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+              context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
     }
 
-    public static final int CONNECTION_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_;
+    public static final int TOPOLOGY_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.TopologyId topologyId_;
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return Whether the topologyId field is set.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
-      return connectionIds_;
+    public boolean hasTopologyId() {
+      return topologyId_ != null;
     }
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return The topologyId.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
-        getConnectionIdsOrBuilderList() {
-      return connectionIds_;
+    public context.ContextOuterClass.TopologyId getTopologyId() {
+      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
     }
+
+    public static final int ENDPOINT_UUID_FIELD_NUMBER = 3;
+    private context.ContextOuterClass.Uuid endpointUuid_;
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>.context.TopologyId topology_id = 1;</code>
      */
     @java.lang.Override
-    public int getConnectionIdsCount() {
-      return connectionIds_.size();
+    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+      return getTopologyId();
     }
+
+    public static final int DEVICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.DeviceId deviceId_;
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return Whether the deviceId field is set.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
-      return connectionIds_.get(index);
+    public boolean hasDeviceId() {
+      return deviceId_ != null;
     }
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return The deviceId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
-        int index) {
-      return connectionIds_.get(index);
+    public context.ContextOuterClass.DeviceId getDeviceId() {
+      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+      return getDeviceId();
+    }
+
+    public static final int ENDPOINT_UUID_FIELD_NUMBER = 3;
+    private context.ContextOuterClass.Uuid endpointUuid_;
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return Whether the endpointUuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointUuid() {
+      return endpointUuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return The endpointUuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getEndpointUuid() {
+      return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
+    }
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
+      return getEndpointUuid();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -44275,8 +54198,14 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < connectionIds_.size(); i++) {
-        output.writeMessage(1, connectionIds_.get(i));
+      if (topologyId_ != null) {
+        output.writeMessage(1, getTopologyId());
+      }
+      if (deviceId_ != null) {
+        output.writeMessage(2, getDeviceId());
+      }
+      if (endpointUuid_ != null) {
+        output.writeMessage(3, getEndpointUuid());
       }
       unknownFields.writeTo(output);
     }
@@ -44287,9 +54216,17 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < connectionIds_.size(); i++) {
+      if (topologyId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, connectionIds_.get(i));
+          .computeMessageSize(1, getTopologyId());
+      }
+      if (deviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getDeviceId());
+      }
+      if (endpointUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getEndpointUuid());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -44301,13 +54238,26 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.EndPointId)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionIdList other = (context.ContextOuterClass.ConnectionIdList) obj;
+      context.ContextOuterClass.EndPointId other = (context.ContextOuterClass.EndPointId) obj;
 
-      if (!getConnectionIdsList()
-          .equals(other.getConnectionIdsList())) return false;
+      if (hasTopologyId() != other.hasTopologyId()) return false;
+      if (hasTopologyId()) {
+        if (!getTopologyId()
+            .equals(other.getTopologyId())) return false;
+      }
+      if (hasDeviceId() != other.hasDeviceId()) return false;
+      if (hasDeviceId()) {
+        if (!getDeviceId()
+            .equals(other.getDeviceId())) return false;
+      }
+      if (hasEndpointUuid() != other.hasEndpointUuid()) return false;
+      if (hasEndpointUuid()) {
+        if (!getEndpointUuid()
+            .equals(other.getEndpointUuid())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -44319,78 +54269,86 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getConnectionIdsCount() > 0) {
-        hash = (37 * hash) + CONNECTION_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionIdsList().hashCode();
+      if (hasTopologyId()) {
+        hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyId().hashCode();
+      }
+      if (hasDeviceId()) {
+        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceId().hashCode();
+      }
+      if (hasEndpointUuid()) {
+        hash = (37 * hash) + ENDPOINT_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointUuid().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(byte[] data)
+    public static context.ContextOuterClass.EndPointId parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPointId parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(
+    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -44403,7 +54361,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionIdList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.EndPointId prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -44419,26 +54377,30 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionIdList}
+     * <pre>
+     * ----- Endpoint ------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.EndPointId}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionIdList)
-        context.ContextOuterClass.ConnectionIdListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.EndPointId)
+        context.ContextOuterClass.EndPointIdOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+                context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionIdList.newBuilder()
+      // Construct using context.ContextOuterClass.EndPointId.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -44451,17 +54413,28 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getConnectionIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (connectionIdsBuilder_ == null) {
-          connectionIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
         } else {
-          connectionIdsBuilder_.clear();
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
+        }
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = null;
+        } else {
+          endpointUuid_ = null;
+          endpointUuidBuilder_ = null;
         }
         return this;
       }
@@ -44469,17 +54442,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionIdList.getDefaultInstance();
+      public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
+        return context.ContextOuterClass.EndPointId.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionIdList build() {
-        context.ContextOuterClass.ConnectionIdList result = buildPartial();
+      public context.ContextOuterClass.EndPointId build() {
+        context.ContextOuterClass.EndPointId result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -44487,17 +54460,22 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionIdList buildPartial() {
-        context.ContextOuterClass.ConnectionIdList result = new context.ContextOuterClass.ConnectionIdList(this);
-        int from_bitField0_ = bitField0_;
-        if (connectionIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.connectionIds_ = connectionIds_;
+      public context.ContextOuterClass.EndPointId buildPartial() {
+        context.ContextOuterClass.EndPointId result = new context.ContextOuterClass.EndPointId(this);
+        if (topologyIdBuilder_ == null) {
+          result.topologyId_ = topologyId_;
         } else {
-          result.connectionIds_ = connectionIdsBuilder_.build();
+          result.topologyId_ = topologyIdBuilder_.build();
+        }
+        if (deviceIdBuilder_ == null) {
+          result.deviceId_ = deviceId_;
+        } else {
+          result.deviceId_ = deviceIdBuilder_.build();
+        }
+        if (endpointUuidBuilder_ == null) {
+          result.endpointUuid_ = endpointUuid_;
+        } else {
+          result.endpointUuid_ = endpointUuidBuilder_.build();
         }
         onBuilt();
         return result;
@@ -44537,41 +54515,24 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionIdList) {
-          return mergeFrom((context.ContextOuterClass.ConnectionIdList)other);
+        if (other instanceof context.ContextOuterClass.EndPointId) {
+          return mergeFrom((context.ContextOuterClass.EndPointId)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionIdList other) {
-        if (other == context.ContextOuterClass.ConnectionIdList.getDefaultInstance()) return this;
-        if (connectionIdsBuilder_ == null) {
-          if (!other.connectionIds_.isEmpty()) {
-            if (connectionIds_.isEmpty()) {
-              connectionIds_ = other.connectionIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureConnectionIdsIsMutable();
-              connectionIds_.addAll(other.connectionIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.connectionIds_.isEmpty()) {
-            if (connectionIdsBuilder_.isEmpty()) {
-              connectionIdsBuilder_.dispose();
-              connectionIdsBuilder_ = null;
-              connectionIds_ = other.connectionIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              connectionIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getConnectionIdsFieldBuilder() : null;
-            } else {
-              connectionIdsBuilder_.addAllMessages(other.connectionIds_);
-            }
-          }
+      public Builder mergeFrom(context.ContextOuterClass.EndPointId other) {
+        if (other == context.ContextOuterClass.EndPointId.getDefaultInstance()) return this;
+        if (other.hasTopologyId()) {
+          mergeTopologyId(other.getTopologyId());
+        }
+        if (other.hasDeviceId()) {
+          mergeDeviceId(other.getDeviceId());
+        }
+        if (other.hasEndpointUuid()) {
+          mergeEndpointUuid(other.getEndpointUuid());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -44588,11 +54549,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionIdList parsedMessage = null;
+        context.ContextOuterClass.EndPointId parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionIdList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.EndPointId) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -44601,246 +54562,364 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_ =
-        java.util.Collections.emptyList();
-      private void ensureConnectionIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>(connectionIds_);
-          bitField0_ |= 0x00000001;
-         }
+      private context.ContextOuterClass.TopologyId topologyId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdBuilder_;
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       * @return Whether the topologyId field is set.
+       */
+      public boolean hasTopologyId() {
+        return topologyIdBuilder_ != null || topologyId_ != null;
       }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       * @return The topologyId.
+       */
+      public context.ContextOuterClass.TopologyId getTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+        } else {
+          return topologyIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder setTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          topologyId_ = value;
+          onChanged();
+        } else {
+          topologyIdBuilder_.setMessage(value);
+        }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdsBuilder_;
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder setTopologyId(
+          context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = builderForValue.build();
+          onChanged();
+        } else {
+          topologyIdBuilder_.setMessage(builderForValue.build());
+        }
 
+        return this;
+      }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.TopologyId topology_id = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
-        if (connectionIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(connectionIds_);
+      public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (topologyId_ != null) {
+            topologyId_ =
+              context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
+          } else {
+            topologyId_ = value;
+          }
+          onChanged();
         } else {
-          return connectionIdsBuilder_.getMessageList();
+          topologyIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder clearTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
+          onChanged();
+        } else {
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+        
+        onChanged();
+        return getTopologyIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+        if (topologyIdBuilder_ != null) {
+          return topologyIdBuilder_.getMessageOrBuilder();
+        } else {
+          return topologyId_ == null ?
+              context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+        }
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
+          getTopologyIdFieldBuilder() {
+        if (topologyIdBuilder_ == null) {
+          topologyIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
+                  getTopologyId(),
+                  getParentForChildren(),
+                  isClean());
+          topologyId_ = null;
         }
+        return topologyIdBuilder_;
       }
+
+      private context.ContextOuterClass.DeviceId deviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
+       * @return Whether the deviceId field is set.
        */
-      public int getConnectionIdsCount() {
-        if (connectionIdsBuilder_ == null) {
-          return connectionIds_.size();
-        } else {
-          return connectionIdsBuilder_.getCount();
-        }
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
+       * @return The deviceId.
        */
-      public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
-        if (connectionIdsBuilder_ == null) {
-          return connectionIds_.get(index);
+      public context.ContextOuterClass.DeviceId getDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         } else {
-          return connectionIdsBuilder_.getMessage(index);
+          return deviceIdBuilder_.getMessage();
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder setConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdsBuilder_ == null) {
+      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureConnectionIdsIsMutable();
-          connectionIds_.set(index, value);
+          deviceId_ = value;
           onChanged();
         } else {
-          connectionIdsBuilder_.setMessage(index, value);
+          deviceIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder setConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.set(index, builderForValue.build());
+      public Builder setDeviceId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = builderForValue.build();
           onChanged();
         } else {
-          connectionIdsBuilder_.setMessage(index, builderForValue.build());
+          deviceIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder addConnectionIds(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (deviceId_ != null) {
+            deviceId_ =
+              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+          } else {
+            deviceId_ = value;
           }
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(value);
           onChanged();
         } else {
-          connectionIdsBuilder_.addMessage(value);
+          deviceIdBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder addConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(index, value);
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
           onChanged();
         } else {
-          connectionIdsBuilder_.addMessage(index, value);
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder addConnectionIds(
-          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+        
+        onChanged();
+        return getDeviceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+        if (deviceIdBuilder_ != null) {
+          return deviceIdBuilder_.getMessageOrBuilder();
         } else {
-          connectionIdsBuilder_.addMessage(builderForValue.build());
+          return deviceId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder addConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          connectionIdsBuilder_.addMessage(index, builderForValue.build());
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdFieldBuilder() {
+        if (deviceIdBuilder_ == null) {
+          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  getDeviceId(),
+                  getParentForChildren(),
+                  isClean());
+          deviceId_ = null;
         }
-        return this;
+        return deviceIdBuilder_;
       }
+
+      private context.ContextOuterClass.Uuid endpointUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> endpointUuidBuilder_;
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * @return Whether the endpointUuid field is set.
        */
-      public Builder addAllConnectionIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.ConnectionId> values) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, connectionIds_);
-          onChanged();
+      public boolean hasEndpointUuid() {
+        return endpointUuidBuilder_ != null || endpointUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * @return The endpointUuid.
+       */
+      public context.ContextOuterClass.Uuid getEndpointUuid() {
+        if (endpointUuidBuilder_ == null) {
+          return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
         } else {
-          connectionIdsBuilder_.addAllMessages(values);
+          return endpointUuidBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder clearConnectionIds() {
-        if (connectionIdsBuilder_ == null) {
-          connectionIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder setEndpointUuid(context.ContextOuterClass.Uuid value) {
+        if (endpointUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          endpointUuid_ = value;
           onChanged();
         } else {
-          connectionIdsBuilder_.clear();
+          endpointUuidBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder removeConnectionIds(int index) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.remove(index);
+      public Builder setEndpointUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = builderForValue.build();
           onChanged();
         } else {
-          connectionIdsBuilder_.remove(index);
+          endpointUuidBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
-       */
-      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdsBuilder(
-          int index) {
-        return getConnectionIdsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
-          int index) {
-        if (connectionIdsBuilder_ == null) {
-          return connectionIds_.get(index);  } else {
-          return connectionIdsBuilder_.getMessageOrBuilder(index);
+      public Builder mergeEndpointUuid(context.ContextOuterClass.Uuid value) {
+        if (endpointUuidBuilder_ == null) {
+          if (endpointUuid_ != null) {
+            endpointUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(endpointUuid_).mergeFrom(value).buildPartial();
+          } else {
+            endpointUuid_ = value;
+          }
+          onChanged();
+        } else {
+          endpointUuidBuilder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
-           getConnectionIdsOrBuilderList() {
-        if (connectionIdsBuilder_ != null) {
-          return connectionIdsBuilder_.getMessageOrBuilderList();
+      public Builder clearEndpointUuid() {
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(connectionIds_);
+          endpointUuid_ = null;
+          endpointUuidBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder() {
-        return getConnectionIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.ConnectionId.getDefaultInstance());
+      public context.ContextOuterClass.Uuid.Builder getEndpointUuidBuilder() {
+        
+        onChanged();
+        return getEndpointUuidFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder(
-          int index) {
-        return getConnectionIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ConnectionId.getDefaultInstance());
+      public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
+        if (endpointUuidBuilder_ != null) {
+          return endpointUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
+        }
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public java.util.List<context.ContextOuterClass.ConnectionId.Builder> 
-           getConnectionIdsBuilderList() {
-        return getConnectionIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
-          getConnectionIdsFieldBuilder() {
-        if (connectionIdsBuilder_ == null) {
-          connectionIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
-                  connectionIds_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getEndpointUuidFieldBuilder() {
+        if (endpointUuidBuilder_ == null) {
+          endpointUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getEndpointUuid(),
                   getParentForChildren(),
                   isClean());
-          connectionIds_ = null;
+          endpointUuid_ = null;
         }
-        return connectionIdsBuilder_;
+        return endpointUuidBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -44855,95 +54934,156 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionIdList)
+      // @@protoc_insertion_point(builder_scope:context.EndPointId)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionIdList)
-    private static final context.ContextOuterClass.ConnectionIdList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.EndPointId)
+    private static final context.ContextOuterClass.EndPointId DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionIdList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPointId();
     }
 
-    public static context.ContextOuterClass.ConnectionIdList getDefaultInstance() {
+    public static context.ContextOuterClass.EndPointId getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionIdList>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionIdList>() {
+    private static final com.google.protobuf.Parser<EndPointId>
+        PARSER = new com.google.protobuf.AbstractParser<EndPointId>() {
       @java.lang.Override
-      public ConnectionIdList parsePartialFrom(
+      public EndPointId parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionIdList(input, extensionRegistry);
+        return new EndPointId(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionIdList> parser() {
+    public static com.google.protobuf.Parser<EndPointId> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionIdList> getParserForType() {
+    public com.google.protobuf.Parser<EndPointId> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
+    public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionList)
+  public interface EndPointOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.EndPoint)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
-    java.util.List<context.ContextOuterClass.Connection> 
-        getConnectionsList();
+    boolean hasEndpointId();
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
-    context.ContextOuterClass.Connection getConnections(int index);
+    context.ContextOuterClass.EndPointId getEndpointId();
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
-    int getConnectionsCount();
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
+
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>string name = 2;</code>
+     * @return The name.
      */
-    java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
-        getConnectionsOrBuilderList();
+    java.lang.String getName();
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>string name = 2;</code>
+     * @return The bytes for name.
      */
-    context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
-        int index);
+    com.google.protobuf.ByteString
+        getNameBytes();
+
+    /**
+     * <code>string endpoint_type = 3;</code>
+     * @return The endpointType.
+     */
+    java.lang.String getEndpointType();
+    /**
+     * <code>string endpoint_type = 3;</code>
+     * @return The bytes for endpointType.
+     */
+    com.google.protobuf.ByteString
+        getEndpointTypeBytes();
+
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 4;</code>
+     * @return A list containing the kpiSampleTypes.
+     */
+    java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList();
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 4;</code>
+     * @return The count of kpiSampleTypes.
+     */
+    int getKpiSampleTypesCount();
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 4;</code>
+     * @param index The index of the element to return.
+     * @return The kpiSampleTypes at the given index.
+     */
+    kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index);
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 4;</code>
+     * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
+     */
+    java.util.List<java.lang.Integer>
+    getKpiSampleTypesValueList();
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 4;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+     */
+    int getKpiSampleTypesValue(int index);
+
+    /**
+     * <code>.context.Location endpoint_location = 5;</code>
+     * @return Whether the endpointLocation field is set.
+     */
+    boolean hasEndpointLocation();
+    /**
+     * <code>.context.Location endpoint_location = 5;</code>
+     * @return The endpointLocation.
+     */
+    context.ContextOuterClass.Location getEndpointLocation();
+    /**
+     * <code>.context.Location endpoint_location = 5;</code>
+     */
+    context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder();
   }
   /**
-   * Protobuf type {@code context.ConnectionList}
+   * Protobuf type {@code context.EndPoint}
    */
-  public static final class ConnectionList extends
+  public static final class EndPoint extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionList)
-      ConnectionListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.EndPoint)
+      EndPointOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionList.newBuilder() to construct.
-    private ConnectionList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use EndPoint.newBuilder() to construct.
+    private EndPoint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionList() {
-      connections_ = java.util.Collections.emptyList();
+    private EndPoint() {
+      name_ = "";
+      endpointType_ = "";
+      kpiSampleTypes_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionList();
+      return new EndPoint();
     }
 
     @java.lang.Override
@@ -44951,7 +55091,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionList(
+    private EndPoint(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -44971,12 +55111,64 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
+              }
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              name_ = s;
+              break;
+            }
+            case 26: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              endpointType_ = s;
+              break;
+            }
+            case 32: {
+              int rawValue = input.readEnum();
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>();
+                kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              connections_.add(
-                  input.readMessage(context.ContextOuterClass.Connection.parser(), extensionRegistry));
+              kpiSampleTypes_.add(rawValue);
+              break;
+            }
+            case 34: {
+              int length = input.readRawVarint32();
+              int oldLimit = input.pushLimit(length);
+              while(input.getBytesUntilLimit() > 0) {
+                int rawValue = input.readEnum();
+                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                  kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>();
+                  mutable_bitField0_ |= 0x00000001;
+                }
+                kpiSampleTypes_.add(rawValue);
+              }
+              input.popLimit(oldLimit);
+              break;
+            }
+            case 42: {
+              context.ContextOuterClass.Location.Builder subBuilder = null;
+              if (endpointLocation_ != null) {
+                subBuilder = endpointLocation_.toBuilder();
+              }
+              endpointLocation_ = input.readMessage(context.ContextOuterClass.Location.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointLocation_);
+                endpointLocation_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -44995,63 +55187,212 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          connections_ = java.util.Collections.unmodifiableList(connections_);
+          kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
+    }
+
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.EndPointId endpointId_;
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
+    }
+
+    public static final int NAME_FIELD_NUMBER = 2;
+    private volatile java.lang.Object name_;
+    /**
+     * <code>string name = 2;</code>
+     * @return The name.
+     */
+    @java.lang.Override
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        name_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string name = 2;</code>
+     * @return The bytes for name.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int ENDPOINT_TYPE_FIELD_NUMBER = 3;
+    private volatile java.lang.Object endpointType_;
+    /**
+     * <code>string endpoint_type = 3;</code>
+     * @return The endpointType.
+     */
+    @java.lang.Override
+    public java.lang.String getEndpointType() {
+      java.lang.Object ref = endpointType_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        endpointType_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string endpoint_type = 3;</code>
+     * @return The bytes for endpointType.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getEndpointTypeBytes() {
+      java.lang.Object ref = endpointType_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        endpointType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
+    public static final int KPI_SAMPLE_TYPES_FIELD_NUMBER = 4;
+    private java.util.List<java.lang.Integer> kpiSampleTypes_;
+    private static final com.google.protobuf.Internal.ListAdapter.Converter<
+        java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType> kpiSampleTypes_converter_ =
+            new com.google.protobuf.Internal.ListAdapter.Converter<
+                java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>() {
+              public kpi_sample_types.KpiSampleTypes.KpiSampleType convert(java.lang.Integer from) {
+                @SuppressWarnings("deprecation")
+                kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(from);
+                return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
+              }
+            };
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 4;</code>
+     * @return A list containing the kpiSampleTypes.
+     */
     @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
+    public java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList() {
+      return new com.google.protobuf.Internal.ListAdapter<
+          java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>(kpiSampleTypes_, kpiSampleTypes_converter_);
+    }
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 4;</code>
+     * @return The count of kpiSampleTypes.
+     */
+    @java.lang.Override
+    public int getKpiSampleTypesCount() {
+      return kpiSampleTypes_.size();
+    }
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 4;</code>
+     * @param index The index of the element to return.
+     * @return The kpiSampleTypes at the given index.
+     */
+    @java.lang.Override
+    public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index) {
+      return kpiSampleTypes_converter_.convert(kpiSampleTypes_.get(index));
     }
 
-    public static final int CONNECTIONS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Connection> connections_;
+    public static final int NAME_FIELD_NUMBER = 2;
+    private volatile java.lang.Object name_;
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 4;</code>
+     * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
-      return connections_;
+    public java.util.List<java.lang.Integer>
+    getKpiSampleTypesValueList() {
+      return kpiSampleTypes_;
     }
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 4;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
-        getConnectionsOrBuilderList() {
-      return connections_;
+    public int getKpiSampleTypesValue(int index) {
+      return kpiSampleTypes_.get(index);
     }
+    private int kpiSampleTypesMemoizedSerializedSize;
+
+    public static final int ENDPOINT_LOCATION_FIELD_NUMBER = 5;
+    private context.ContextOuterClass.Location endpointLocation_;
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Location endpoint_location = 5;</code>
+     * @return Whether the endpointLocation field is set.
      */
     @java.lang.Override
-    public int getConnectionsCount() {
-      return connections_.size();
+    public boolean hasEndpointLocation() {
+      return endpointLocation_ != null;
     }
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Location endpoint_location = 5;</code>
+     * @return The endpointLocation.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Connection getConnections(int index) {
-      return connections_.get(index);
+    public context.ContextOuterClass.Location getEndpointLocation() {
+      return endpointLocation_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
     }
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Location endpoint_location = 5;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
-        int index) {
-      return connections_.get(index);
+    public context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder() {
+      return getEndpointLocation();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -45068,8 +55409,25 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < connections_.size(); i++) {
-        output.writeMessage(1, connections_.get(i));
+      getSerializedSize();
+      if (endpointId_ != null) {
+        output.writeMessage(1, getEndpointId());
+      }
+      if (!getNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
+      }
+      if (!getEndpointTypeBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, endpointType_);
+      }
+      if (getKpiSampleTypesList().size() > 0) {
+        output.writeUInt32NoTag(34);
+        output.writeUInt32NoTag(kpiSampleTypesMemoizedSerializedSize);
+      }
+      for (int i = 0; i < kpiSampleTypes_.size(); i++) {
+        output.writeEnumNoTag(kpiSampleTypes_.get(i));
+      }
+      if (endpointLocation_ != null) {
+        output.writeMessage(5, getEndpointLocation());
       }
       unknownFields.writeTo(output);
     }
@@ -45080,9 +55438,31 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < connections_.size(); i++) {
+      if (endpointId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, connections_.get(i));
+          .computeMessageSize(1, getEndpointId());
+      }
+      if (!getNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
+      }
+      if (!getEndpointTypeBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, endpointType_);
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < kpiSampleTypes_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeEnumSizeNoTag(kpiSampleTypes_.get(i));
+        }
+        size += dataSize;
+        if (!getKpiSampleTypesList().isEmpty()) {  size += 1;
+          size += com.google.protobuf.CodedOutputStream
+            .computeUInt32SizeNoTag(dataSize);
+        }kpiSampleTypesMemoizedSerializedSize = dataSize;
+      }
+      if (endpointLocation_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, getEndpointLocation());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -45094,13 +55474,26 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionList)) {
+      if (!(obj instanceof context.ContextOuterClass.EndPoint)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionList other = (context.ContextOuterClass.ConnectionList) obj;
+      context.ContextOuterClass.EndPoint other = (context.ContextOuterClass.EndPoint) obj;
 
-      if (!getConnectionsList()
-          .equals(other.getConnectionsList())) return false;
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
+      }
+      if (!getName()
+          .equals(other.getName())) return false;
+      if (!getEndpointType()
+          .equals(other.getEndpointType())) return false;
+      if (!kpiSampleTypes_.equals(other.kpiSampleTypes_)) return false;
+      if (hasEndpointLocation() != other.hasEndpointLocation()) return false;
+      if (hasEndpointLocation()) {
+        if (!getEndpointLocation()
+            .equals(other.getEndpointLocation())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -45112,78 +55505,90 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getConnectionsCount() > 0) {
-        hash = (37 * hash) + CONNECTIONS_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionsList().hashCode();
+      if (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
+      }
+      hash = (37 * hash) + NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getName().hashCode();
+      hash = (37 * hash) + ENDPOINT_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getEndpointType().hashCode();
+      if (getKpiSampleTypesCount() > 0) {
+        hash = (37 * hash) + KPI_SAMPLE_TYPES_FIELD_NUMBER;
+        hash = (53 * hash) + kpiSampleTypes_.hashCode();
+      }
+      if (hasEndpointLocation()) {
+        hash = (37 * hash) + ENDPOINT_LOCATION_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointLocation().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(byte[] data)
+    public static context.ContextOuterClass.EndPoint parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPoint parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(
+    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -45196,7 +55601,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.EndPoint prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -45212,26 +55617,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionList}
+     * Protobuf type {@code context.EndPoint}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionList)
-        context.ContextOuterClass.ConnectionListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.EndPoint)
+        context.ContextOuterClass.EndPointOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
+                context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionList.newBuilder()
+      // Construct using context.ContextOuterClass.EndPoint.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -45244,17 +55649,28 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getConnectionsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (connectionsBuilder_ == null) {
-          connections_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
         } else {
-          connectionsBuilder_.clear();
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+        name_ = "";
+
+        endpointType_ = "";
+
+        kpiSampleTypes_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        if (endpointLocationBuilder_ == null) {
+          endpointLocation_ = null;
+        } else {
+          endpointLocation_ = null;
+          endpointLocationBuilder_ = null;
         }
         return this;
       }
@@ -45262,17 +55678,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionList.getDefaultInstance();
+      public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
+        return context.ContextOuterClass.EndPoint.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionList build() {
-        context.ContextOuterClass.ConnectionList result = buildPartial();
+      public context.ContextOuterClass.EndPoint build() {
+        context.ContextOuterClass.EndPoint result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -45280,17 +55696,25 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionList buildPartial() {
-        context.ContextOuterClass.ConnectionList result = new context.ContextOuterClass.ConnectionList(this);
+      public context.ContextOuterClass.EndPoint buildPartial() {
+        context.ContextOuterClass.EndPoint result = new context.ContextOuterClass.EndPoint(this);
         int from_bitField0_ = bitField0_;
-        if (connectionsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            connections_ = java.util.Collections.unmodifiableList(connections_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.connections_ = connections_;
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
         } else {
-          result.connections_ = connectionsBuilder_.build();
+          result.endpointId_ = endpointIdBuilder_.build();
+        }
+        result.name_ = name_;
+        result.endpointType_ = endpointType_;
+        if (((bitField0_ & 0x00000001) != 0)) {
+          kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
+        result.kpiSampleTypes_ = kpiSampleTypes_;
+        if (endpointLocationBuilder_ == null) {
+          result.endpointLocation_ = endpointLocation_;
+        } else {
+          result.endpointLocation_ = endpointLocationBuilder_.build();
         }
         onBuilt();
         return result;
@@ -45316,324 +55740,623 @@ public final class ContextOuterClass {
           com.google.protobuf.Descriptors.OneofDescriptor oneof) {
         return super.clearOneof(oneof);
       }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.EndPoint) {
+          return mergeFrom((context.ContextOuterClass.EndPoint)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.EndPoint other) {
+        if (other == context.ContextOuterClass.EndPoint.getDefaultInstance()) return this;
+        if (other.hasEndpointId()) {
+          mergeEndpointId(other.getEndpointId());
+        }
+        if (!other.getName().isEmpty()) {
+          name_ = other.name_;
+          onChanged();
+        }
+        if (!other.getEndpointType().isEmpty()) {
+          endpointType_ = other.endpointType_;
+          onChanged();
+        }
+        if (!other.kpiSampleTypes_.isEmpty()) {
+          if (kpiSampleTypes_.isEmpty()) {
+            kpiSampleTypes_ = other.kpiSampleTypes_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureKpiSampleTypesIsMutable();
+            kpiSampleTypes_.addAll(other.kpiSampleTypes_);
+          }
+          onChanged();
+        }
+        if (other.hasEndpointLocation()) {
+          mergeEndpointLocation(other.getEndpointLocation());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.EndPoint parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.EndPoint) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private context.ContextOuterClass.EndPointId endpointId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return Whether the endpointId field is set.
+       */
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return The endpointId.
+       */
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        } else {
+          return endpointIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          endpointId_ = value;
+          onChanged();
+        } else {
+          endpointIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
+          onChanged();
+        } else {
+          endpointIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+          } else {
+            endpointId_ = value;
+          }
+          onChanged();
+        } else {
+          endpointIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+          onChanged();
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+        
+        onChanged();
+        return getEndpointIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        }
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
+                  getParentForChildren(),
+                  isClean());
+          endpointId_ = null;
+        }
+        return endpointIdBuilder_;
+      }
+
+      private java.lang.Object name_ = "";
+      /**
+       * <code>string name = 2;</code>
+       * @return The name.
+       */
+      public java.lang.String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          name_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @return The bytes for name.
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @param value The name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
       }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+      /**
+       * <code>string name = 2;</code>
+       * @param value The bytes for name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        name_ = value;
+        onChanged();
+        return this;
       }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionList) {
-          return mergeFrom((context.ContextOuterClass.ConnectionList)other);
+
+      private java.lang.Object endpointType_ = "";
+      /**
+       * <code>string endpoint_type = 3;</code>
+       * @return The endpointType.
+       */
+      public java.lang.String getEndpointType() {
+        java.lang.Object ref = endpointType_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          endpointType_ = s;
+          return s;
         } else {
-          super.mergeFrom(other);
-          return this;
+          return (java.lang.String) ref;
         }
       }
-
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionList other) {
-        if (other == context.ContextOuterClass.ConnectionList.getDefaultInstance()) return this;
-        if (connectionsBuilder_ == null) {
-          if (!other.connections_.isEmpty()) {
-            if (connections_.isEmpty()) {
-              connections_ = other.connections_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureConnectionsIsMutable();
-              connections_.addAll(other.connections_);
-            }
-            onChanged();
-          }
+      /**
+       * <code>string endpoint_type = 3;</code>
+       * @return The bytes for endpointType.
+       */
+      public com.google.protobuf.ByteString
+          getEndpointTypeBytes() {
+        java.lang.Object ref = endpointType_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          endpointType_ = b;
+          return b;
         } else {
-          if (!other.connections_.isEmpty()) {
-            if (connectionsBuilder_.isEmpty()) {
-              connectionsBuilder_.dispose();
-              connectionsBuilder_ = null;
-              connections_ = other.connections_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              connectionsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getConnectionsFieldBuilder() : null;
-            } else {
-              connectionsBuilder_.addAllMessages(other.connections_);
-            }
-          }
+          return (com.google.protobuf.ByteString) ref;
         }
-        this.mergeUnknownFields(other.unknownFields);
+      }
+      /**
+       * <code>string endpoint_type = 3;</code>
+       * @param value The endpointType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setEndpointType(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        endpointType_ = value;
         onChanged();
         return this;
       }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      /**
+       * <code>string endpoint_type = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearEndpointType() {
+        
+        endpointType_ = getDefaultInstance().getEndpointType();
+        onChanged();
+        return this;
       }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.ConnectionList parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionList) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
+      /**
+       * <code>string endpoint_type = 3;</code>
+       * @param value The bytes for endpointType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setEndpointTypeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        endpointType_ = value;
+        onChanged();
         return this;
       }
-      private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.Connection> connections_ =
+      private java.util.List<java.lang.Integer> kpiSampleTypes_ =
         java.util.Collections.emptyList();
-      private void ensureConnectionsIsMutable() {
+      private void ensureKpiSampleTypesIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>(connections_);
+          kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>(kpiSampleTypes_);
           bitField0_ |= 0x00000001;
-         }
+        }
       }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> connectionsBuilder_;
-
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 4;</code>
+       * @return A list containing the kpiSampleTypes.
        */
-      public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
-        if (connectionsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(connections_);
-        } else {
-          return connectionsBuilder_.getMessageList();
-        }
+      public java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList() {
+        return new com.google.protobuf.Internal.ListAdapter<
+            java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>(kpiSampleTypes_, kpiSampleTypes_converter_);
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 4;</code>
+       * @return The count of kpiSampleTypes.
        */
-      public int getConnectionsCount() {
-        if (connectionsBuilder_ == null) {
-          return connections_.size();
-        } else {
-          return connectionsBuilder_.getCount();
-        }
+      public int getKpiSampleTypesCount() {
+        return kpiSampleTypes_.size();
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 4;</code>
+       * @param index The index of the element to return.
+       * @return The kpiSampleTypes at the given index.
        */
-      public context.ContextOuterClass.Connection getConnections(int index) {
-        if (connectionsBuilder_ == null) {
-          return connections_.get(index);
-        } else {
-          return connectionsBuilder_.getMessage(index);
-        }
+      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index) {
+        return kpiSampleTypes_converter_.convert(kpiSampleTypes_.get(index));
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 4;</code>
+       * @param index The index to set the value at.
+       * @param value The kpiSampleTypes to set.
+       * @return This builder for chaining.
        */
-      public Builder setConnections(
-          int index, context.ContextOuterClass.Connection value) {
-        if (connectionsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConnectionsIsMutable();
-          connections_.set(index, value);
-          onChanged();
-        } else {
-          connectionsBuilder_.setMessage(index, value);
+      public Builder setKpiSampleTypes(
+          int index, kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.set(index, value.getNumber());
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 4;</code>
+       * @param value The kpiSampleTypes to add.
+       * @return This builder for chaining.
        */
-      public Builder setConnections(
-          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          connectionsBuilder_.setMessage(index, builderForValue.build());
+      public Builder addKpiSampleTypes(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.add(value.getNumber());
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 4;</code>
+       * @param values The kpiSampleTypes to add.
+       * @return This builder for chaining.
        */
-      public Builder addConnections(context.ContextOuterClass.Connection value) {
-        if (connectionsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConnectionsIsMutable();
-          connections_.add(value);
-          onChanged();
-        } else {
-          connectionsBuilder_.addMessage(value);
+      public Builder addAllKpiSampleTypes(
+          java.lang.Iterable<? extends kpi_sample_types.KpiSampleTypes.KpiSampleType> values) {
+        ensureKpiSampleTypesIsMutable();
+        for (kpi_sample_types.KpiSampleTypes.KpiSampleType value : values) {
+          kpiSampleTypes_.add(value.getNumber());
         }
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 4;</code>
+       * @return This builder for chaining.
        */
-      public Builder addConnections(
-          int index, context.ContextOuterClass.Connection value) {
-        if (connectionsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConnectionsIsMutable();
-          connections_.add(index, value);
-          onChanged();
-        } else {
-          connectionsBuilder_.addMessage(index, value);
-        }
+      public Builder clearKpiSampleTypes() {
+        kpiSampleTypes_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
         return this;
       }
+
+      private context.ContextOuterClass.Location endpointLocation_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> endpointLocationBuilder_;
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Location endpoint_location = 5;</code>
+       * @return Whether the endpointLocation field is set.
        */
-      public Builder addConnections(
-          context.ContextOuterClass.Connection.Builder builderForValue) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.add(builderForValue.build());
-          onChanged();
-        } else {
-          connectionsBuilder_.addMessage(builderForValue.build());
-        }
+      public boolean hasEndpointLocation() {
+        return endpointLocationBuilder_ != null || endpointLocation_ != null;
+      }
+      /**
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 4;</code>
+       * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
+       */
+      public java.util.List<java.lang.Integer>
+      getKpiSampleTypesValueList() {
+        return java.util.Collections.unmodifiableList(kpiSampleTypes_);
+      }
+      /**
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 4;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+       */
+      public int getKpiSampleTypesValue(int index) {
+        return kpiSampleTypes_.get(index);
+      }
+      /**
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 4;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+       * @return This builder for chaining.
+       */
+      public Builder setKpiSampleTypesValue(
+          int index, int value) {
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.set(index, value);
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 4;</code>
+       * @param value The enum numeric value on the wire for kpiSampleTypes to add.
+       * @return This builder for chaining.
        */
-      public Builder addConnections(
-          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          connectionsBuilder_.addMessage(index, builderForValue.build());
-        }
+      public Builder addKpiSampleTypesValue(int value) {
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.add(value);
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 4;</code>
+       * @param values The enum numeric values on the wire for kpiSampleTypes to add.
+       * @return This builder for chaining.
        */
-      public Builder addAllConnections(
-          java.lang.Iterable<? extends context.ContextOuterClass.Connection> values) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, connections_);
-          onChanged();
-        } else {
-          connectionsBuilder_.addAllMessages(values);
+      public Builder addAllKpiSampleTypesValue(
+          java.lang.Iterable<java.lang.Integer> values) {
+        ensureKpiSampleTypesIsMutable();
+        for (int value : values) {
+          kpiSampleTypes_.add(value);
         }
+        onChanged();
         return this;
       }
+
+      private context.ContextOuterClass.Location endpointLocation_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> endpointLocationBuilder_;
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Location endpoint_location = 5;</code>
+       * @return Whether the endpointLocation field is set.
        */
-      public Builder clearConnections() {
-        if (connectionsBuilder_ == null) {
-          connections_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
+      public boolean hasEndpointLocation() {
+        return endpointLocationBuilder_ != null || endpointLocation_ != null;
+      }
+      /**
+       * <code>.context.Location endpoint_location = 5;</code>
+       * @return The endpointLocation.
+       */
+      public context.ContextOuterClass.Location getEndpointLocation() {
+        if (endpointLocationBuilder_ == null) {
+          return endpointLocation_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
         } else {
-          connectionsBuilder_.clear();
+          return endpointLocationBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Location endpoint_location = 5;</code>
        */
-      public Builder removeConnections(int index) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.remove(index);
+      public Builder setEndpointLocation(context.ContextOuterClass.Location value) {
+        if (endpointLocationBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          endpointLocation_ = value;
           onChanged();
         } else {
-          connectionsBuilder_.remove(index);
+          endpointLocationBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Location endpoint_location = 5;</code>
        */
-      public context.ContextOuterClass.Connection.Builder getConnectionsBuilder(
-          int index) {
-        return getConnectionsFieldBuilder().getBuilder(index);
+      public Builder setEndpointLocation(
+          context.ContextOuterClass.Location.Builder builderForValue) {
+        if (endpointLocationBuilder_ == null) {
+          endpointLocation_ = builderForValue.build();
+          onChanged();
+        } else {
+          endpointLocationBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Location endpoint_location = 5;</code>
        */
-      public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
-          int index) {
-        if (connectionsBuilder_ == null) {
-          return connections_.get(index);  } else {
-          return connectionsBuilder_.getMessageOrBuilder(index);
+      public Builder mergeEndpointLocation(context.ContextOuterClass.Location value) {
+        if (endpointLocationBuilder_ == null) {
+          if (endpointLocation_ != null) {
+            endpointLocation_ =
+              context.ContextOuterClass.Location.newBuilder(endpointLocation_).mergeFrom(value).buildPartial();
+          } else {
+            endpointLocation_ = value;
+          }
+          onChanged();
+        } else {
+          endpointLocationBuilder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Location endpoint_location = 5;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
-           getConnectionsOrBuilderList() {
-        if (connectionsBuilder_ != null) {
-          return connectionsBuilder_.getMessageOrBuilderList();
+      public Builder clearEndpointLocation() {
+        if (endpointLocationBuilder_ == null) {
+          endpointLocation_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(connections_);
+          endpointLocation_ = null;
+          endpointLocationBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Location endpoint_location = 5;</code>
        */
-      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder() {
-        return getConnectionsFieldBuilder().addBuilder(
-            context.ContextOuterClass.Connection.getDefaultInstance());
+      public context.ContextOuterClass.Location.Builder getEndpointLocationBuilder() {
+        
+        onChanged();
+        return getEndpointLocationFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Location endpoint_location = 5;</code>
        */
-      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder(
-          int index) {
-        return getConnectionsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Connection.getDefaultInstance());
+      public context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder() {
+        if (endpointLocationBuilder_ != null) {
+          return endpointLocationBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointLocation_ == null ?
+              context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
+        }
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Location endpoint_location = 5;</code>
        */
-      public java.util.List<context.ContextOuterClass.Connection.Builder> 
-           getConnectionsBuilderList() {
-        return getConnectionsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> 
-          getConnectionsFieldBuilder() {
-        if (connectionsBuilder_ == null) {
-          connectionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder>(
-                  connections_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> 
+          getEndpointLocationFieldBuilder() {
+        if (endpointLocationBuilder_ == null) {
+          endpointLocationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder>(
+                  getEndpointLocation(),
                   getParentForChildren(),
                   isClean());
-          connections_ = null;
+          endpointLocation_ = null;
         }
-        return connectionsBuilder_;
+        return endpointLocationBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -45648,100 +56371,124 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionList)
+      // @@protoc_insertion_point(builder_scope:context.EndPoint)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionList)
-    private static final context.ContextOuterClass.ConnectionList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.EndPoint)
+    private static final context.ContextOuterClass.EndPoint DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPoint();
     }
 
-    public static context.ContextOuterClass.ConnectionList getDefaultInstance() {
+    public static context.ContextOuterClass.EndPoint getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionList>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionList>() {
+    private static final com.google.protobuf.Parser<EndPoint>
+        PARSER = new com.google.protobuf.AbstractParser<EndPoint>() {
       @java.lang.Override
-      public ConnectionList parsePartialFrom(
+      public EndPoint parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionList(input, extensionRegistry);
+        return new EndPoint(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionList> parser() {
+    public static com.google.protobuf.Parser<EndPoint> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionList> getParserForType() {
+    public com.google.protobuf.Parser<EndPoint> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
+    public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionEvent)
+  public interface EndPointNameOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.EndPointName)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
-    boolean hasEvent();
+    boolean hasEndpointId();
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
+     */
+    context.ContextOuterClass.EndPointId getEndpointId();
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
+
+    /**
+     * <code>string device_name = 2;</code>
+     * @return The deviceName.
      */
-    context.ContextOuterClass.Event getEvent();
+    java.lang.String getDeviceName();
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>string device_name = 2;</code>
+     * @return The bytes for deviceName.
      */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+    com.google.protobuf.ByteString
+        getDeviceNameBytes();
 
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
-     * @return Whether the connectionId field is set.
+     * <code>string endpoint_name = 3;</code>
+     * @return The endpointName.
      */
-    boolean hasConnectionId();
+    java.lang.String getEndpointName();
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
-     * @return The connectionId.
+     * <code>string endpoint_name = 3;</code>
+     * @return The bytes for endpointName.
      */
-    context.ContextOuterClass.ConnectionId getConnectionId();
+    com.google.protobuf.ByteString
+        getEndpointNameBytes();
+
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
+     * <code>string endpoint_type = 4;</code>
+     * @return The endpointType.
      */
-    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
+    java.lang.String getEndpointType();
+    /**
+     * <code>string endpoint_type = 4;</code>
+     * @return The bytes for endpointType.
+     */
+    com.google.protobuf.ByteString
+        getEndpointTypeBytes();
   }
   /**
-   * Protobuf type {@code context.ConnectionEvent}
+   * Protobuf type {@code context.EndPointName}
    */
-  public static final class ConnectionEvent extends
+  public static final class EndPointName extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionEvent)
-      ConnectionEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.EndPointName)
+      EndPointNameOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionEvent.newBuilder() to construct.
-    private ConnectionEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use EndPointName.newBuilder() to construct.
+    private EndPointName(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionEvent() {
+    private EndPointName() {
+      deviceName_ = "";
+      endpointName_ = "";
+      endpointType_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionEvent();
+      return new EndPointName();
     }
 
     @java.lang.Override
@@ -45749,7 +56496,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionEvent(
+    private EndPointName(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -45768,29 +56515,34 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Event.Builder subBuilder = null;
-              if (event_ != null) {
-                subBuilder = event_.toBuilder();
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
               }
-              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(event_);
-                event_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
-              if (connectionId_ != null) {
-                subBuilder = connectionId_.toBuilder();
-              }
-              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(connectionId_);
-                connectionId_ = subBuilder.buildPartial();
-              }
+              java.lang.String s = input.readStringRequireUtf8();
+
+              deviceName_ = s;
+              break;
+            }
+            case 26: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              endpointName_ = s;
+              break;
+            }
+            case 34: {
+              java.lang.String s = input.readStringRequireUtf8();
 
+              endpointType_ = s;
               break;
             }
             default: {
@@ -45814,67 +56566,155 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
+      return context.ContextOuterClass.internal_static_context_EndPointName_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionEvent_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_EndPointName_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
+              context.ContextOuterClass.EndPointName.class, context.ContextOuterClass.EndPointName.Builder.class);
     }
 
-    public static final int EVENT_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Event event_;
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.EndPointId endpointId_;
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
     @java.lang.Override
-    public boolean hasEvent() {
-      return event_ != null;
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
     }
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
     }
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
     }
 
-    public static final int CONNECTION_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.ConnectionId connectionId_;
+    public static final int DEVICE_NAME_FIELD_NUMBER = 2;
+    private volatile java.lang.Object deviceName_;
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
-     * @return Whether the connectionId field is set.
+     * <code>string device_name = 2;</code>
+     * @return The deviceName.
      */
     @java.lang.Override
-    public boolean hasConnectionId() {
-      return connectionId_ != null;
+    public java.lang.String getDeviceName() {
+      java.lang.Object ref = deviceName_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        deviceName_ = s;
+        return s;
+      }
     }
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
-     * @return The connectionId.
+     * <code>string device_name = 2;</code>
+     * @return The bytes for deviceName.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getConnectionId() {
-      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+    public com.google.protobuf.ByteString
+        getDeviceNameBytes() {
+      java.lang.Object ref = deviceName_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        deviceName_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
+
+    public static final int ENDPOINT_NAME_FIELD_NUMBER = 3;
+    private volatile java.lang.Object endpointName_;
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
+     * <code>string endpoint_name = 3;</code>
+     * @return The endpointName.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-      return getConnectionId();
+    public java.lang.String getEndpointName() {
+      java.lang.Object ref = endpointName_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        endpointName_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string endpoint_name = 3;</code>
+     * @return The bytes for endpointName.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getEndpointNameBytes() {
+      java.lang.Object ref = endpointName_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        endpointName_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int ENDPOINT_TYPE_FIELD_NUMBER = 4;
+    private volatile java.lang.Object endpointType_;
+    /**
+     * <code>string endpoint_type = 4;</code>
+     * @return The endpointType.
+     */
+    @java.lang.Override
+    public java.lang.String getEndpointType() {
+      java.lang.Object ref = endpointType_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        endpointType_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string endpoint_type = 4;</code>
+     * @return The bytes for endpointType.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getEndpointTypeBytes() {
+      java.lang.Object ref = endpointType_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        endpointType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
     private byte memoizedIsInitialized = -1;
@@ -45891,11 +56731,17 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (event_ != null) {
-        output.writeMessage(1, getEvent());
+      if (endpointId_ != null) {
+        output.writeMessage(1, getEndpointId());
       }
-      if (connectionId_ != null) {
-        output.writeMessage(2, getConnectionId());
+      if (!getDeviceNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, deviceName_);
+      }
+      if (!getEndpointNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, endpointName_);
+      }
+      if (!getEndpointTypeBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, endpointType_);
       }
       unknownFields.writeTo(output);
     }
@@ -45906,13 +56752,18 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (event_ != null) {
+      if (endpointId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
+          .computeMessageSize(1, getEndpointId());
       }
-      if (connectionId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getConnectionId());
+      if (!getDeviceNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, deviceName_);
+      }
+      if (!getEndpointNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, endpointName_);
+      }
+      if (!getEndpointTypeBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, endpointType_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -45924,21 +56775,22 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionEvent)) {
+      if (!(obj instanceof context.ContextOuterClass.EndPointName)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionEvent other = (context.ContextOuterClass.ConnectionEvent) obj;
+      context.ContextOuterClass.EndPointName other = (context.ContextOuterClass.EndPointName) obj;
 
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) return false;
-      }
-      if (hasConnectionId() != other.hasConnectionId()) return false;
-      if (hasConnectionId()) {
-        if (!getConnectionId()
-            .equals(other.getConnectionId())) return false;
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
       }
+      if (!getDeviceName()
+          .equals(other.getDeviceName())) return false;
+      if (!getEndpointName()
+          .equals(other.getEndpointName())) return false;
+      if (!getEndpointType()
+          .equals(other.getEndpointType())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -45950,82 +56802,84 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEvent()) {
-        hash = (37 * hash) + EVENT_FIELD_NUMBER;
-        hash = (53 * hash) + getEvent().hashCode();
-      }
-      if (hasConnectionId()) {
-        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionId().hashCode();
+      if (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
       }
+      hash = (37 * hash) + DEVICE_NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getDeviceName().hashCode();
+      hash = (37 * hash) + ENDPOINT_NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getEndpointName().hashCode();
+      hash = (37 * hash) + ENDPOINT_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getEndpointType().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointName parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointName parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointName parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointName parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(byte[] data)
+    public static context.ContextOuterClass.EndPointName parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointName parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPointName parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointName parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPointName parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseDelimitedFrom(
+    public static context.ContextOuterClass.EndPointName parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointName parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointName parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -46038,7 +56892,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionEvent prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.EndPointName prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -46054,26 +56908,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionEvent}
+     * Protobuf type {@code context.EndPointName}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionEvent)
-        context.ContextOuterClass.ConnectionEventOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.EndPointName)
+        context.ContextOuterClass.EndPointNameOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPointName_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_EndPointName_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
+                context.ContextOuterClass.EndPointName.class, context.ContextOuterClass.EndPointName.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionEvent.newBuilder()
+      // Construct using context.ContextOuterClass.EndPointName.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -46091,35 +56945,35 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
-        } else {
-          event_ = null;
-          eventBuilder_ = null;
-        }
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = null;
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
         } else {
-          connectionId_ = null;
-          connectionIdBuilder_ = null;
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
         }
+        deviceName_ = "";
+
+        endpointName_ = "";
+
+        endpointType_ = "";
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPointName_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionEvent.getDefaultInstance();
+      public context.ContextOuterClass.EndPointName getDefaultInstanceForType() {
+        return context.ContextOuterClass.EndPointName.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionEvent build() {
-        context.ContextOuterClass.ConnectionEvent result = buildPartial();
+      public context.ContextOuterClass.EndPointName build() {
+        context.ContextOuterClass.EndPointName result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -46127,18 +56981,16 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionEvent buildPartial() {
-        context.ContextOuterClass.ConnectionEvent result = new context.ContextOuterClass.ConnectionEvent(this);
-        if (eventBuilder_ == null) {
-          result.event_ = event_;
-        } else {
-          result.event_ = eventBuilder_.build();
-        }
-        if (connectionIdBuilder_ == null) {
-          result.connectionId_ = connectionId_;
+      public context.ContextOuterClass.EndPointName buildPartial() {
+        context.ContextOuterClass.EndPointName result = new context.ContextOuterClass.EndPointName(this);
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
         } else {
-          result.connectionId_ = connectionIdBuilder_.build();
+          result.endpointId_ = endpointIdBuilder_.build();
         }
+        result.deviceName_ = deviceName_;
+        result.endpointName_ = endpointName_;
+        result.endpointType_ = endpointType_;
         onBuilt();
         return result;
       }
@@ -46177,21 +57029,30 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionEvent) {
-          return mergeFrom((context.ContextOuterClass.ConnectionEvent)other);
+        if (other instanceof context.ContextOuterClass.EndPointName) {
+          return mergeFrom((context.ContextOuterClass.EndPointName)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionEvent other) {
-        if (other == context.ContextOuterClass.ConnectionEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
+      public Builder mergeFrom(context.ContextOuterClass.EndPointName other) {
+        if (other == context.ContextOuterClass.EndPointName.getDefaultInstance()) return this;
+        if (other.hasEndpointId()) {
+          mergeEndpointId(other.getEndpointId());
         }
-        if (other.hasConnectionId()) {
-          mergeConnectionId(other.getConnectionId());
+        if (!other.getDeviceName().isEmpty()) {
+          deviceName_ = other.deviceName_;
+          onChanged();
+        }
+        if (!other.getEndpointName().isEmpty()) {
+          endpointName_ = other.endpointName_;
+          onChanged();
+        }
+        if (!other.getEndpointType().isEmpty()) {
+          endpointType_ = other.endpointType_;
+          onChanged();
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -46208,11 +57069,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionEvent parsedMessage = null;
+        context.ContextOuterClass.EndPointName parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionEvent) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.EndPointName) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -46222,242 +57083,351 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private context.ContextOuterClass.Event event_;
+      private context.ContextOuterClass.EndPointId endpointId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return Whether the event field is set.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return Whether the endpointId field is set.
        */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return The endpointId.
        */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         } else {
-          return eventBuilder_.getMessage();
+          return endpointIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          event_ = value;
+          endpointId_ = value;
           onChanged();
         } else {
-          eventBuilder_.setMessage(value);
+          endpointIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
           onChanged();
         } else {
-          eventBuilder_.setMessage(builderForValue.build());
+          endpointIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder mergeEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
-          if (event_ != null) {
-            event_ =
-              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
           } else {
-            event_ = value;
+            endpointId_ = value;
           }
           onChanged();
         } else {
-          eventBuilder_.mergeFrom(value);
+          endpointIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
           onChanged();
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
         
         onChanged();
-        return getEventFieldBuilder().getBuilder();
+        return getEndpointIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-        if (eventBuilder_ != null) {
-          return eventBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
         } else {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
-          getEventFieldBuilder() {
-        if (eventBuilder_ == null) {
-          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
-                  getEvent(),
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
                   getParentForChildren(),
                   isClean());
-          event_ = null;
+          endpointId_ = null;
         }
-        return eventBuilder_;
+        return endpointIdBuilder_;
       }
 
-      private context.ContextOuterClass.ConnectionId connectionId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
+      private java.lang.Object deviceName_ = "";
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
-       * @return Whether the connectionId field is set.
+       * <code>string device_name = 2;</code>
+       * @return The deviceName.
        */
-      public boolean hasConnectionId() {
-        return connectionIdBuilder_ != null || connectionId_ != null;
+      public java.lang.String getDeviceName() {
+        java.lang.Object ref = deviceName_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          deviceName_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
-       * @return The connectionId.
+       * <code>string device_name = 2;</code>
+       * @return The bytes for deviceName.
        */
-      public context.ContextOuterClass.ConnectionId getConnectionId() {
-        if (connectionIdBuilder_ == null) {
-          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+      public com.google.protobuf.ByteString
+          getDeviceNameBytes() {
+        java.lang.Object ref = deviceName_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          deviceName_ = b;
+          return b;
         } else {
-          return connectionIdBuilder_.getMessage();
+          return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>string device_name = 2;</code>
+       * @param value The deviceName to set.
+       * @return This builder for chaining.
        */
-      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          connectionId_ = value;
-          onChanged();
+      public Builder setDeviceName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        deviceName_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string device_name = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDeviceName() {
+        
+        deviceName_ = getDefaultInstance().getDeviceName();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string device_name = 2;</code>
+       * @param value The bytes for deviceName to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        deviceName_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object endpointName_ = "";
+      /**
+       * <code>string endpoint_name = 3;</code>
+       * @return The endpointName.
+       */
+      public java.lang.String getEndpointName() {
+        java.lang.Object ref = endpointName_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          endpointName_ = s;
+          return s;
         } else {
-          connectionIdBuilder_.setMessage(value);
+          return (java.lang.String) ref;
         }
-
+      }
+      /**
+       * <code>string endpoint_name = 3;</code>
+       * @return The bytes for endpointName.
+       */
+      public com.google.protobuf.ByteString
+          getEndpointNameBytes() {
+        java.lang.Object ref = endpointName_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          endpointName_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string endpoint_name = 3;</code>
+       * @param value The endpointName to set.
+       * @return This builder for chaining.
+       */
+      public Builder setEndpointName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        endpointName_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string endpoint_name = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearEndpointName() {
+        
+        endpointName_ = getDefaultInstance().getEndpointName();
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>string endpoint_name = 3;</code>
+       * @param value The bytes for endpointName to set.
+       * @return This builder for chaining.
        */
-      public Builder setConnectionId(
-          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = builderForValue.build();
-          onChanged();
-        } else {
-          connectionIdBuilder_.setMessage(builderForValue.build());
-        }
-
+      public Builder setEndpointNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        endpointName_ = value;
+        onChanged();
         return this;
       }
+
+      private java.lang.Object endpointType_ = "";
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>string endpoint_type = 4;</code>
+       * @return The endpointType.
        */
-      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdBuilder_ == null) {
-          if (connectionId_ != null) {
-            connectionId_ =
-              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
-          } else {
-            connectionId_ = value;
-          }
-          onChanged();
+      public java.lang.String getEndpointType() {
+        java.lang.Object ref = endpointType_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          endpointType_ = s;
+          return s;
         } else {
-          connectionIdBuilder_.mergeFrom(value);
+          return (java.lang.String) ref;
         }
-
-        return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>string endpoint_type = 4;</code>
+       * @return The bytes for endpointType.
        */
-      public Builder clearConnectionId() {
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = null;
-          onChanged();
+      public com.google.protobuf.ByteString
+          getEndpointTypeBytes() {
+        java.lang.Object ref = endpointType_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          endpointType_ = b;
+          return b;
         } else {
-          connectionId_ = null;
-          connectionIdBuilder_ = null;
+          return (com.google.protobuf.ByteString) ref;
         }
-
-        return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>string endpoint_type = 4;</code>
+       * @param value The endpointType to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
-        
+      public Builder setEndpointType(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        endpointType_ = value;
         onChanged();
-        return getConnectionIdFieldBuilder().getBuilder();
+        return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>string endpoint_type = 4;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-        if (connectionIdBuilder_ != null) {
-          return connectionIdBuilder_.getMessageOrBuilder();
-        } else {
-          return connectionId_ == null ?
-              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
-        }
+      public Builder clearEndpointType() {
+        
+        endpointType_ = getDefaultInstance().getEndpointType();
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>string endpoint_type = 4;</code>
+       * @param value The bytes for endpointType to set.
+       * @return This builder for chaining.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
-          getConnectionIdFieldBuilder() {
-        if (connectionIdBuilder_ == null) {
-          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
-                  getConnectionId(),
-                  getParentForChildren(),
-                  isClean());
-          connectionId_ = null;
-        }
-        return connectionIdBuilder_;
+      public Builder setEndpointTypeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        endpointType_ = value;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -46472,119 +57442,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionEvent)
+      // @@protoc_insertion_point(builder_scope:context.EndPointName)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionEvent)
-    private static final context.ContextOuterClass.ConnectionEvent DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.EndPointName)
+    private static final context.ContextOuterClass.EndPointName DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionEvent();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPointName();
     }
 
-    public static context.ContextOuterClass.ConnectionEvent getDefaultInstance() {
+    public static context.ContextOuterClass.EndPointName getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionEvent>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionEvent>() {
+    private static final com.google.protobuf.Parser<EndPointName>
+        PARSER = new com.google.protobuf.AbstractParser<EndPointName>() {
       @java.lang.Override
-      public ConnectionEvent parsePartialFrom(
+      public EndPointName parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionEvent(input, extensionRegistry);
+        return new EndPointName(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionEvent> parser() {
+    public static com.google.protobuf.Parser<EndPointName> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionEvent> getParserForType() {
+    public com.google.protobuf.Parser<EndPointName> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
+    public context.ContextOuterClass.EndPointName getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface EndPointIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.EndPointId)
+  public interface EndPointIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.EndPointIdList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return Whether the topologyId field is set.
-     */
-    boolean hasTopologyId();
-    /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return The topologyId.
-     */
-    context.ContextOuterClass.TopologyId getTopologyId();
-    /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     */
-    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
-
-    /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return Whether the deviceId field is set.
-     */
-    boolean hasDeviceId();
-    /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return The deviceId.
+     * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
      */
-    context.ContextOuterClass.DeviceId getDeviceId();
+    java.util.List<context.ContextOuterClass.EndPointId> 
+        getEndpointIdsList();
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
+     * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
      */
-    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
-
+    context.ContextOuterClass.EndPointId getEndpointIds(int index);
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
-     * @return Whether the endpointUuid field is set.
+     * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
      */
-    boolean hasEndpointUuid();
+    int getEndpointIdsCount();
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
-     * @return The endpointUuid.
+     * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
      */
-    context.ContextOuterClass.Uuid getEndpointUuid();
+    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getEndpointIdsOrBuilderList();
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder();
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdsOrBuilder(
+        int index);
   }
   /**
-   * <pre>
-   * ----- Endpoint ------------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.EndPointId}
+   * Protobuf type {@code context.EndPointIdList}
    */
-  public static final class EndPointId extends
+  public static final class EndPointIdList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.EndPointId)
-      EndPointIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.EndPointIdList)
+      EndPointIdListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use EndPointId.newBuilder() to construct.
-    private EndPointId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use EndPointIdList.newBuilder() to construct.
+    private EndPointIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private EndPointId() {
+    private EndPointIdList() {
+      endpointIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new EndPointId();
+      return new EndPointIdList();
     }
 
     @java.lang.Override
@@ -46592,7 +57538,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private EndPointId(
+    private EndPointIdList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -46600,6 +57546,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -46611,42 +57558,12 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
-              if (topologyId_ != null) {
-                subBuilder = topologyId_.toBuilder();
-              }
-              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(topologyId_);
-                topologyId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
-              if (deviceId_ != null) {
-                subBuilder = deviceId_.toBuilder();
-              }
-              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(deviceId_);
-                deviceId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 26: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (endpointUuid_ != null) {
-                subBuilder = endpointUuid_.toBuilder();
-              }
-              endpointUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(endpointUuid_);
-                endpointUuid_ = subBuilder.buildPartial();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                endpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
+                mutable_bitField0_ |= 0x00000001;
               }
-
+              endpointIds_.add(
+                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -46664,99 +57581,64 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          endpointIds_ = java.util.Collections.unmodifiableList(endpointIds_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+      return context.ContextOuterClass.internal_static_context_EndPointIdList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_EndPointIdList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
-    }
-
-    public static final int TOPOLOGY_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.TopologyId topologyId_;
-    /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return Whether the topologyId field is set.
-     */
-    @java.lang.Override
-    public boolean hasTopologyId() {
-      return topologyId_ != null;
-    }
-    /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return The topologyId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.TopologyId getTopologyId() {
-      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
-    }
-    /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-      return getTopologyId();
+              context.ContextOuterClass.EndPointIdList.class, context.ContextOuterClass.EndPointIdList.Builder.class);
     }
 
-    public static final int DEVICE_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.DeviceId deviceId_;
-    /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return Whether the deviceId field is set.
-     */
-    @java.lang.Override
-    public boolean hasDeviceId() {
-      return deviceId_ != null;
-    }
+    public static final int ENDPOINT_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.EndPointId> endpointIds_;
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return The deviceId.
+     * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceId getDeviceId() {
-      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+    public java.util.List<context.ContextOuterClass.EndPointId> getEndpointIdsList() {
+      return endpointIds_;
     }
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
+     * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-      return getDeviceId();
+    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getEndpointIdsOrBuilderList() {
+      return endpointIds_;
     }
-
-    public static final int ENDPOINT_UUID_FIELD_NUMBER = 3;
-    private context.ContextOuterClass.Uuid endpointUuid_;
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
-     * @return Whether the endpointUuid field is set.
+     * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
      */
     @java.lang.Override
-    public boolean hasEndpointUuid() {
-      return endpointUuid_ != null;
+    public int getEndpointIdsCount() {
+      return endpointIds_.size();
     }
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
-     * @return The endpointUuid.
+     * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getEndpointUuid() {
-      return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
+    public context.ContextOuterClass.EndPointId getEndpointIds(int index) {
+      return endpointIds_.get(index);
     }
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
-      return getEndpointUuid();
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdsOrBuilder(
+        int index) {
+      return endpointIds_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -46773,14 +57655,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (topologyId_ != null) {
-        output.writeMessage(1, getTopologyId());
-      }
-      if (deviceId_ != null) {
-        output.writeMessage(2, getDeviceId());
-      }
-      if (endpointUuid_ != null) {
-        output.writeMessage(3, getEndpointUuid());
+      for (int i = 0; i < endpointIds_.size(); i++) {
+        output.writeMessage(1, endpointIds_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -46791,17 +57667,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (topologyId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getTopologyId());
-      }
-      if (deviceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getDeviceId());
-      }
-      if (endpointUuid_ != null) {
+      for (int i = 0; i < endpointIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, getEndpointUuid());
+          .computeMessageSize(1, endpointIds_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -46813,26 +57681,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.EndPointId)) {
+      if (!(obj instanceof context.ContextOuterClass.EndPointIdList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.EndPointId other = (context.ContextOuterClass.EndPointId) obj;
+      context.ContextOuterClass.EndPointIdList other = (context.ContextOuterClass.EndPointIdList) obj;
 
-      if (hasTopologyId() != other.hasTopologyId()) return false;
-      if (hasTopologyId()) {
-        if (!getTopologyId()
-            .equals(other.getTopologyId())) return false;
-      }
-      if (hasDeviceId() != other.hasDeviceId()) return false;
-      if (hasDeviceId()) {
-        if (!getDeviceId()
-            .equals(other.getDeviceId())) return false;
-      }
-      if (hasEndpointUuid() != other.hasEndpointUuid()) return false;
-      if (hasEndpointUuid()) {
-        if (!getEndpointUuid()
-            .equals(other.getEndpointUuid())) return false;
-      }
+      if (!getEndpointIdsList()
+          .equals(other.getEndpointIdsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -46844,86 +57699,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasTopologyId()) {
-        hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getTopologyId().hashCode();
-      }
-      if (hasDeviceId()) {
-        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceId().hashCode();
-      }
-      if (hasEndpointUuid()) {
-        hash = (37 * hash) + ENDPOINT_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getEndpointUuid().hashCode();
+      if (getEndpointIdsCount() > 0) {
+        hash = (37 * hash) + ENDPOINT_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointIdsList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPointIdList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPointIdList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPointIdList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPointIdList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(byte[] data)
+    public static context.ContextOuterClass.EndPointIdList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPointIdList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPointIdList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPointIdList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPointIdList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(
+    public static context.ContextOuterClass.EndPointIdList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPointIdList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPointIdList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -46936,7 +57783,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.EndPointId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.EndPointIdList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -46952,30 +57799,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Endpoint ------------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.EndPointId}
+     * Protobuf type {@code context.EndPointIdList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.EndPointId)
-        context.ContextOuterClass.EndPointIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.EndPointIdList)
+        context.ContextOuterClass.EndPointIdListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPointIdList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_EndPointIdList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
+                context.ContextOuterClass.EndPointIdList.class, context.ContextOuterClass.EndPointIdList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.EndPointId.newBuilder()
+      // Construct using context.ContextOuterClass.EndPointIdList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -46988,28 +57831,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getEndpointIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = null;
-        } else {
-          topologyId_ = null;
-          topologyIdBuilder_ = null;
-        }
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
-        } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
-        }
-        if (endpointUuidBuilder_ == null) {
-          endpointUuid_ = null;
+        if (endpointIdsBuilder_ == null) {
+          endpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          endpointUuid_ = null;
-          endpointUuidBuilder_ = null;
+          endpointIdsBuilder_.clear();
         }
         return this;
       }
@@ -47017,17 +57849,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPointIdList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
-        return context.ContextOuterClass.EndPointId.getDefaultInstance();
+      public context.ContextOuterClass.EndPointIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.EndPointIdList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPointId build() {
-        context.ContextOuterClass.EndPointId result = buildPartial();
+      public context.ContextOuterClass.EndPointIdList build() {
+        context.ContextOuterClass.EndPointIdList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -47035,22 +57867,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPointId buildPartial() {
-        context.ContextOuterClass.EndPointId result = new context.ContextOuterClass.EndPointId(this);
-        if (topologyIdBuilder_ == null) {
-          result.topologyId_ = topologyId_;
-        } else {
-          result.topologyId_ = topologyIdBuilder_.build();
-        }
-        if (deviceIdBuilder_ == null) {
-          result.deviceId_ = deviceId_;
-        } else {
-          result.deviceId_ = deviceIdBuilder_.build();
-        }
-        if (endpointUuidBuilder_ == null) {
-          result.endpointUuid_ = endpointUuid_;
+      public context.ContextOuterClass.EndPointIdList buildPartial() {
+        context.ContextOuterClass.EndPointIdList result = new context.ContextOuterClass.EndPointIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (endpointIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            endpointIds_ = java.util.Collections.unmodifiableList(endpointIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.endpointIds_ = endpointIds_;
         } else {
-          result.endpointUuid_ = endpointUuidBuilder_.build();
+          result.endpointIds_ = endpointIdsBuilder_.build();
         }
         onBuilt();
         return result;
@@ -47090,24 +57917,41 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.EndPointId) {
-          return mergeFrom((context.ContextOuterClass.EndPointId)other);
+        if (other instanceof context.ContextOuterClass.EndPointIdList) {
+          return mergeFrom((context.ContextOuterClass.EndPointIdList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.EndPointId other) {
-        if (other == context.ContextOuterClass.EndPointId.getDefaultInstance()) return this;
-        if (other.hasTopologyId()) {
-          mergeTopologyId(other.getTopologyId());
-        }
-        if (other.hasDeviceId()) {
-          mergeDeviceId(other.getDeviceId());
-        }
-        if (other.hasEndpointUuid()) {
-          mergeEndpointUuid(other.getEndpointUuid());
+      public Builder mergeFrom(context.ContextOuterClass.EndPointIdList other) {
+        if (other == context.ContextOuterClass.EndPointIdList.getDefaultInstance()) return this;
+        if (endpointIdsBuilder_ == null) {
+          if (!other.endpointIds_.isEmpty()) {
+            if (endpointIds_.isEmpty()) {
+              endpointIds_ = other.endpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureEndpointIdsIsMutable();
+              endpointIds_.addAll(other.endpointIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.endpointIds_.isEmpty()) {
+            if (endpointIdsBuilder_.isEmpty()) {
+              endpointIdsBuilder_.dispose();
+              endpointIdsBuilder_ = null;
+              endpointIds_ = other.endpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              endpointIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getEndpointIdsFieldBuilder() : null;
+            } else {
+              endpointIdsBuilder_.addAllMessages(other.endpointIds_);
+            }
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -47124,375 +57968,259 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.EndPointId parsedMessage = null;
+        context.ContextOuterClass.EndPointIdList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.EndPointId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.EndPointIdList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private context.ContextOuterClass.TopologyId topologyId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdBuilder_;
-      /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       * @return Whether the topologyId field is set.
-       */
-      public boolean hasTopologyId() {
-        return topologyIdBuilder_ != null || topologyId_ != null;
-      }
-      /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       * @return The topologyId.
-       */
-      public context.ContextOuterClass.TopologyId getTopologyId() {
-        if (topologyIdBuilder_ == null) {
-          return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
-        } else {
-          return topologyIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       */
-      public Builder setTopologyId(context.ContextOuterClass.TopologyId value) {
-        if (topologyIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          topologyId_ = value;
-          onChanged();
-        } else {
-          topologyIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       */
-      public Builder setTopologyId(
-          context.ContextOuterClass.TopologyId.Builder builderForValue) {
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = builderForValue.build();
-          onChanged();
-        } else {
-          topologyIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       */
-      public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
-        if (topologyIdBuilder_ == null) {
-          if (topologyId_ != null) {
-            topologyId_ =
-              context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
-          } else {
-            topologyId_ = value;
-          }
-          onChanged();
-        } else {
-          topologyIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       */
-      public Builder clearTopologyId() {
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = null;
-          onChanged();
-        } else {
-          topologyId_ = null;
-          topologyIdBuilder_ = null;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
-
         return this;
       }
-      /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       */
-      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
-        
-        onChanged();
-        return getTopologyIdFieldBuilder().getBuilder();
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.EndPointId> endpointIds_ =
+        java.util.Collections.emptyList();
+      private void ensureEndpointIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          endpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(endpointIds_);
+          bitField0_ |= 0x00000001;
+         }
       }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdsBuilder_;
+
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
        */
-      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-        if (topologyIdBuilder_ != null) {
-          return topologyIdBuilder_.getMessageOrBuilder();
+      public java.util.List<context.ContextOuterClass.EndPointId> getEndpointIdsList() {
+        if (endpointIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(endpointIds_);
         } else {
-          return topologyId_ == null ?
-              context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+          return endpointIdsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
-          getTopologyIdFieldBuilder() {
-        if (topologyIdBuilder_ == null) {
-          topologyIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
-                  getTopologyId(),
-                  getParentForChildren(),
-                  isClean());
-          topologyId_ = null;
+      public int getEndpointIdsCount() {
+        if (endpointIdsBuilder_ == null) {
+          return endpointIds_.size();
+        } else {
+          return endpointIdsBuilder_.getCount();
         }
-        return topologyIdBuilder_;
-      }
-
-      private context.ContextOuterClass.DeviceId deviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       * @return Whether the deviceId field is set.
-       */
-      public boolean hasDeviceId() {
-        return deviceIdBuilder_ != null || deviceId_ != null;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       * @return The deviceId.
+       * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
        */
-      public context.ContextOuterClass.DeviceId getDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+      public context.ContextOuterClass.EndPointId getEndpointIds(int index) {
+        if (endpointIdsBuilder_ == null) {
+          return endpointIds_.get(index);
         } else {
-          return deviceIdBuilder_.getMessage();
+          return endpointIdsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
        */
-      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
+      public Builder setEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (endpointIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          deviceId_ = value;
+          ensureEndpointIdsIsMutable();
+          endpointIds_.set(index, value);
           onChanged();
         } else {
-          deviceIdBuilder_.setMessage(value);
+          endpointIdsBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
        */
-      public Builder setDeviceId(
-          context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = builderForValue.build();
+      public Builder setEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdsBuilder_ == null) {
+          ensureEndpointIdsIsMutable();
+          endpointIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          deviceIdBuilder_.setMessage(builderForValue.build());
+          endpointIdsBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
        */
-      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (deviceId_ != null) {
-            deviceId_ =
-              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
-          } else {
-            deviceId_ = value;
+      public Builder addEndpointIds(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureEndpointIdsIsMutable();
+          endpointIds_.add(value);
           onChanged();
         } else {
-          deviceIdBuilder_.mergeFrom(value);
+          endpointIdsBuilder_.addMessage(value);
         }
-
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
        */
-      public Builder clearDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
+      public Builder addEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (endpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureEndpointIdsIsMutable();
+          endpointIds_.add(index, value);
           onChanged();
         } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
+          endpointIdsBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
-        
-        onChanged();
-        return getDeviceIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
        */
-      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-        if (deviceIdBuilder_ != null) {
-          return deviceIdBuilder_.getMessageOrBuilder();
+      public Builder addEndpointIds(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdsBuilder_ == null) {
+          ensureEndpointIdsIsMutable();
+          endpointIds_.add(builderForValue.build());
+          onChanged();
         } else {
-          return deviceId_ == null ?
-              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+          endpointIdsBuilder_.addMessage(builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
-          getDeviceIdFieldBuilder() {
-        if (deviceIdBuilder_ == null) {
-          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
-                  getDeviceId(),
-                  getParentForChildren(),
-                  isClean());
-          deviceId_ = null;
+      public Builder addEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdsBuilder_ == null) {
+          ensureEndpointIdsIsMutable();
+          endpointIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          endpointIdsBuilder_.addMessage(index, builderForValue.build());
         }
-        return deviceIdBuilder_;
-      }
-
-      private context.ContextOuterClass.Uuid endpointUuid_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> endpointUuidBuilder_;
-      /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       * @return Whether the endpointUuid field is set.
-       */
-      public boolean hasEndpointUuid() {
-        return endpointUuidBuilder_ != null || endpointUuid_ != null;
+        return this;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       * @return The endpointUuid.
+       * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
        */
-      public context.ContextOuterClass.Uuid getEndpointUuid() {
-        if (endpointUuidBuilder_ == null) {
-          return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
+      public Builder addAllEndpointIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
+        if (endpointIdsBuilder_ == null) {
+          ensureEndpointIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, endpointIds_);
+          onChanged();
         } else {
-          return endpointUuidBuilder_.getMessage();
+          endpointIdsBuilder_.addAllMessages(values);
         }
+        return this;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
        */
-      public Builder setEndpointUuid(context.ContextOuterClass.Uuid value) {
-        if (endpointUuidBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          endpointUuid_ = value;
+      public Builder clearEndpointIds() {
+        if (endpointIdsBuilder_ == null) {
+          endpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          endpointUuidBuilder_.setMessage(value);
+          endpointIdsBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
        */
-      public Builder setEndpointUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (endpointUuidBuilder_ == null) {
-          endpointUuid_ = builderForValue.build();
+      public Builder removeEndpointIds(int index) {
+        if (endpointIdsBuilder_ == null) {
+          ensureEndpointIdsIsMutable();
+          endpointIds_.remove(index);
           onChanged();
         } else {
-          endpointUuidBuilder_.setMessage(builderForValue.build());
+          endpointIdsBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
        */
-      public Builder mergeEndpointUuid(context.ContextOuterClass.Uuid value) {
-        if (endpointUuidBuilder_ == null) {
-          if (endpointUuid_ != null) {
-            endpointUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(endpointUuid_).mergeFrom(value).buildPartial();
-          } else {
-            endpointUuid_ = value;
-          }
-          onChanged();
-        } else {
-          endpointUuidBuilder_.mergeFrom(value);
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdsBuilder(
+          int index) {
+        return getEndpointIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdsOrBuilder(
+          int index) {
+        if (endpointIdsBuilder_ == null) {
+          return endpointIds_.get(index);  } else {
+          return endpointIdsBuilder_.getMessageOrBuilder(index);
         }
-
-        return this;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
        */
-      public Builder clearEndpointUuid() {
-        if (endpointUuidBuilder_ == null) {
-          endpointUuid_ = null;
-          onChanged();
+      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+           getEndpointIdsOrBuilderList() {
+        if (endpointIdsBuilder_ != null) {
+          return endpointIdsBuilder_.getMessageOrBuilderList();
         } else {
-          endpointUuid_ = null;
-          endpointUuidBuilder_ = null;
+          return java.util.Collections.unmodifiableList(endpointIds_);
         }
-
-        return this;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getEndpointUuidBuilder() {
-        
-        onChanged();
-        return getEndpointUuidFieldBuilder().getBuilder();
+      public context.ContextOuterClass.EndPointId.Builder addEndpointIdsBuilder() {
+        return getEndpointIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPointId.getDefaultInstance());
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
-        if (endpointUuidBuilder_ != null) {
-          return endpointUuidBuilder_.getMessageOrBuilder();
-        } else {
-          return endpointUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
-        }
+      public context.ContextOuterClass.EndPointId.Builder addEndpointIdsBuilder(
+          int index) {
+        return getEndpointIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>repeated .context.EndPointId endpoint_ids = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getEndpointUuidFieldBuilder() {
-        if (endpointUuidBuilder_ == null) {
-          endpointUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getEndpointUuid(),
+      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
+           getEndpointIdsBuilderList() {
+        return getEndpointIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdsFieldBuilder() {
+        if (endpointIdsBuilder_ == null) {
+          endpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  endpointIds_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          endpointUuid_ = null;
+          endpointIds_ = null;
         }
-        return endpointUuidBuilder_;
+        return endpointIdsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -47507,143 +58235,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.EndPointId)
+      // @@protoc_insertion_point(builder_scope:context.EndPointIdList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.EndPointId)
-    private static final context.ContextOuterClass.EndPointId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.EndPointIdList)
+    private static final context.ContextOuterClass.EndPointIdList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPointId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPointIdList();
     }
 
-    public static context.ContextOuterClass.EndPointId getDefaultInstance() {
+    public static context.ContextOuterClass.EndPointIdList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<EndPointId>
-        PARSER = new com.google.protobuf.AbstractParser<EndPointId>() {
+    private static final com.google.protobuf.Parser<EndPointIdList>
+        PARSER = new com.google.protobuf.AbstractParser<EndPointIdList>() {
       @java.lang.Override
-      public EndPointId parsePartialFrom(
+      public EndPointIdList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new EndPointId(input, extensionRegistry);
+        return new EndPointIdList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<EndPointId> parser() {
+    public static com.google.protobuf.Parser<EndPointIdList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<EndPointId> getParserForType() {
+    public com.google.protobuf.Parser<EndPointIdList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
+    public context.ContextOuterClass.EndPointIdList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface EndPointOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.EndPoint)
+  public interface EndPointNameListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.EndPointNameList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return Whether the endpointId field is set.
-     */
-    boolean hasEndpointId();
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return The endpointId.
-     */
-    context.ContextOuterClass.EndPointId getEndpointId();
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     */
-    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
-
-    /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The endpointType.
-     */
-    java.lang.String getEndpointType();
-    /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The bytes for endpointType.
-     */
-    com.google.protobuf.ByteString
-        getEndpointTypeBytes();
-
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return A list containing the kpiSampleTypes.
-     */
-    java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList();
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return The count of kpiSampleTypes.
-     */
-    int getKpiSampleTypesCount();
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @param index The index of the element to return.
-     * @return The kpiSampleTypes at the given index.
-     */
-    kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index);
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
+     * <code>repeated .context.EndPointName endpoint_names = 1;</code>
      */
-    java.util.List<java.lang.Integer>
-    getKpiSampleTypesValueList();
+    java.util.List<context.ContextOuterClass.EndPointName> 
+        getEndpointNamesList();
     /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @param index The index of the value to return.
-     * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+     * <code>repeated .context.EndPointName endpoint_names = 1;</code>
      */
-    int getKpiSampleTypesValue(int index);
-
+    context.ContextOuterClass.EndPointName getEndpointNames(int index);
     /**
-     * <code>.context.Location endpoint_location = 4;</code>
-     * @return Whether the endpointLocation field is set.
+     * <code>repeated .context.EndPointName endpoint_names = 1;</code>
      */
-    boolean hasEndpointLocation();
+    int getEndpointNamesCount();
     /**
-     * <code>.context.Location endpoint_location = 4;</code>
-     * @return The endpointLocation.
+     * <code>repeated .context.EndPointName endpoint_names = 1;</code>
      */
-    context.ContextOuterClass.Location getEndpointLocation();
+    java.util.List<? extends context.ContextOuterClass.EndPointNameOrBuilder> 
+        getEndpointNamesOrBuilderList();
     /**
-     * <code>.context.Location endpoint_location = 4;</code>
+     * <code>repeated .context.EndPointName endpoint_names = 1;</code>
      */
-    context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder();
+    context.ContextOuterClass.EndPointNameOrBuilder getEndpointNamesOrBuilder(
+        int index);
   }
   /**
-   * Protobuf type {@code context.EndPoint}
+   * Protobuf type {@code context.EndPointNameList}
    */
-  public static final class EndPoint extends
+  public static final class EndPointNameList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.EndPoint)
-      EndPointOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.EndPointNameList)
+      EndPointNameListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use EndPoint.newBuilder() to construct.
-    private EndPoint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use EndPointNameList.newBuilder() to construct.
+    private EndPointNameList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private EndPoint() {
-      endpointType_ = "";
-      kpiSampleTypes_ = java.util.Collections.emptyList();
+    private EndPointNameList() {
+      endpointNames_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new EndPoint();
+      return new EndPointNameList();
     }
 
     @java.lang.Override
@@ -47651,7 +58331,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private EndPoint(
+    private EndPointNameList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -47671,58 +58351,12 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
-              if (endpointId_ != null) {
-                subBuilder = endpointId_.toBuilder();
-              }
-              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(endpointId_);
-                endpointId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              endpointType_ = s;
-              break;
-            }
-            case 24: {
-              int rawValue = input.readEnum();
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>();
+                endpointNames_ = new java.util.ArrayList<context.ContextOuterClass.EndPointName>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              kpiSampleTypes_.add(rawValue);
-              break;
-            }
-            case 26: {
-              int length = input.readRawVarint32();
-              int oldLimit = input.pushLimit(length);
-              while(input.getBytesUntilLimit() > 0) {
-                int rawValue = input.readEnum();
-                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                  kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>();
-                  mutable_bitField0_ |= 0x00000001;
-                }
-                kpiSampleTypes_.add(rawValue);
-              }
-              input.popLimit(oldLimit);
-              break;
-            }
-            case 34: {
-              context.ContextOuterClass.Location.Builder subBuilder = null;
-              if (endpointLocation_ != null) {
-                subBuilder = endpointLocation_.toBuilder();
-              }
-              endpointLocation_ = input.readMessage(context.ContextOuterClass.Location.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(endpointLocation_);
-                endpointLocation_ = subBuilder.buildPartial();
-              }
-
+              endpointNames_.add(
+                  input.readMessage(context.ContextOuterClass.EndPointName.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -47741,7 +58375,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
+          endpointNames_ = java.util.Collections.unmodifiableList(endpointNames_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -47749,163 +58383,55 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+      return context.ContextOuterClass.internal_static_context_EndPointNameList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_EndPointNameList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
-    }
-
-    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.EndPointId endpointId_;
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return Whether the endpointId field is set.
-     */
-    @java.lang.Override
-    public boolean hasEndpointId() {
-      return endpointId_ != null;
-    }
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return The endpointId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointId getEndpointId() {
-      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
-    }
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-      return getEndpointId();
-    }
-
-    public static final int ENDPOINT_TYPE_FIELD_NUMBER = 2;
-    private volatile java.lang.Object endpointType_;
-    /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The endpointType.
-     */
-    @java.lang.Override
-    public java.lang.String getEndpointType() {
-      java.lang.Object ref = endpointType_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        endpointType_ = s;
-        return s;
-      }
-    }
-    /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The bytes for endpointType.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getEndpointTypeBytes() {
-      java.lang.Object ref = endpointType_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        endpointType_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+              context.ContextOuterClass.EndPointNameList.class, context.ContextOuterClass.EndPointNameList.Builder.class);
     }
 
-    public static final int KPI_SAMPLE_TYPES_FIELD_NUMBER = 3;
-    private java.util.List<java.lang.Integer> kpiSampleTypes_;
-    private static final com.google.protobuf.Internal.ListAdapter.Converter<
-        java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType> kpiSampleTypes_converter_ =
-            new com.google.protobuf.Internal.ListAdapter.Converter<
-                java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>() {
-              public kpi_sample_types.KpiSampleTypes.KpiSampleType convert(java.lang.Integer from) {
-                @SuppressWarnings("deprecation")
-                kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(from);
-                return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
-              }
-            };
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return A list containing the kpiSampleTypes.
-     */
-    @java.lang.Override
-    public java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList() {
-      return new com.google.protobuf.Internal.ListAdapter<
-          java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>(kpiSampleTypes_, kpiSampleTypes_converter_);
-    }
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return The count of kpiSampleTypes.
-     */
-    @java.lang.Override
-    public int getKpiSampleTypesCount() {
-      return kpiSampleTypes_.size();
-    }
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @param index The index of the element to return.
-     * @return The kpiSampleTypes at the given index.
-     */
-    @java.lang.Override
-    public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index) {
-      return kpiSampleTypes_converter_.convert(kpiSampleTypes_.get(index));
-    }
+    public static final int ENDPOINT_NAMES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.EndPointName> endpointNames_;
     /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
+     * <code>repeated .context.EndPointName endpoint_names = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<java.lang.Integer>
-    getKpiSampleTypesValueList() {
-      return kpiSampleTypes_;
+    public java.util.List<context.ContextOuterClass.EndPointName> getEndpointNamesList() {
+      return endpointNames_;
     }
     /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @param index The index of the value to return.
-     * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+     * <code>repeated .context.EndPointName endpoint_names = 1;</code>
      */
     @java.lang.Override
-    public int getKpiSampleTypesValue(int index) {
-      return kpiSampleTypes_.get(index);
+    public java.util.List<? extends context.ContextOuterClass.EndPointNameOrBuilder> 
+        getEndpointNamesOrBuilderList() {
+      return endpointNames_;
     }
-    private int kpiSampleTypesMemoizedSerializedSize;
-
-    public static final int ENDPOINT_LOCATION_FIELD_NUMBER = 4;
-    private context.ContextOuterClass.Location endpointLocation_;
     /**
-     * <code>.context.Location endpoint_location = 4;</code>
-     * @return Whether the endpointLocation field is set.
+     * <code>repeated .context.EndPointName endpoint_names = 1;</code>
      */
     @java.lang.Override
-    public boolean hasEndpointLocation() {
-      return endpointLocation_ != null;
+    public int getEndpointNamesCount() {
+      return endpointNames_.size();
     }
     /**
-     * <code>.context.Location endpoint_location = 4;</code>
-     * @return The endpointLocation.
+     * <code>repeated .context.EndPointName endpoint_names = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Location getEndpointLocation() {
-      return endpointLocation_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
+    public context.ContextOuterClass.EndPointName getEndpointNames(int index) {
+      return endpointNames_.get(index);
     }
     /**
-     * <code>.context.Location endpoint_location = 4;</code>
+     * <code>repeated .context.EndPointName endpoint_names = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder() {
-      return getEndpointLocation();
+    public context.ContextOuterClass.EndPointNameOrBuilder getEndpointNamesOrBuilder(
+        int index) {
+      return endpointNames_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -47921,55 +58447,22 @@ public final class ContextOuterClass {
 
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      if (endpointId_ != null) {
-        output.writeMessage(1, getEndpointId());
-      }
-      if (!getEndpointTypeBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, endpointType_);
-      }
-      if (getKpiSampleTypesList().size() > 0) {
-        output.writeUInt32NoTag(26);
-        output.writeUInt32NoTag(kpiSampleTypesMemoizedSerializedSize);
-      }
-      for (int i = 0; i < kpiSampleTypes_.size(); i++) {
-        output.writeEnumNoTag(kpiSampleTypes_.get(i));
-      }
-      if (endpointLocation_ != null) {
-        output.writeMessage(4, getEndpointLocation());
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (endpointId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEndpointId());
-      }
-      if (!getEndpointTypeBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, endpointType_);
-      }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < kpiSampleTypes_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeEnumSizeNoTag(kpiSampleTypes_.get(i));
-        }
-        size += dataSize;
-        if (!getKpiSampleTypesList().isEmpty()) {  size += 1;
-          size += com.google.protobuf.CodedOutputStream
-            .computeUInt32SizeNoTag(dataSize);
-        }kpiSampleTypesMemoizedSerializedSize = dataSize;
+                        throws java.io.IOException {
+      for (int i = 0; i < endpointNames_.size(); i++) {
+        output.writeMessage(1, endpointNames_.get(i));
       }
-      if (endpointLocation_ != null) {
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < endpointNames_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, getEndpointLocation());
+          .computeMessageSize(1, endpointNames_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -47981,24 +58474,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.EndPoint)) {
+      if (!(obj instanceof context.ContextOuterClass.EndPointNameList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.EndPoint other = (context.ContextOuterClass.EndPoint) obj;
+      context.ContextOuterClass.EndPointNameList other = (context.ContextOuterClass.EndPointNameList) obj;
 
-      if (hasEndpointId() != other.hasEndpointId()) return false;
-      if (hasEndpointId()) {
-        if (!getEndpointId()
-            .equals(other.getEndpointId())) return false;
-      }
-      if (!getEndpointType()
-          .equals(other.getEndpointType())) return false;
-      if (!kpiSampleTypes_.equals(other.kpiSampleTypes_)) return false;
-      if (hasEndpointLocation() != other.hasEndpointLocation()) return false;
-      if (hasEndpointLocation()) {
-        if (!getEndpointLocation()
-            .equals(other.getEndpointLocation())) return false;
-      }
+      if (!getEndpointNamesList()
+          .equals(other.getEndpointNamesList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -48010,88 +58492,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEndpointId()) {
-        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getEndpointId().hashCode();
-      }
-      hash = (37 * hash) + ENDPOINT_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + getEndpointType().hashCode();
-      if (getKpiSampleTypesCount() > 0) {
-        hash = (37 * hash) + KPI_SAMPLE_TYPES_FIELD_NUMBER;
-        hash = (53 * hash) + kpiSampleTypes_.hashCode();
-      }
-      if (hasEndpointLocation()) {
-        hash = (37 * hash) + ENDPOINT_LOCATION_FIELD_NUMBER;
-        hash = (53 * hash) + getEndpointLocation().hashCode();
+      if (getEndpointNamesCount() > 0) {
+        hash = (37 * hash) + ENDPOINT_NAMES_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointNamesList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.EndPointNameList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.EndPointNameList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.EndPointNameList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.EndPointNameList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(byte[] data)
+    public static context.ContextOuterClass.EndPointNameList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.EndPointNameList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPointNameList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.EndPointNameList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPointNameList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(
+    public static context.ContextOuterClass.EndPointNameList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.EndPointNameList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.EndPointNameList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -48104,7 +58576,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.EndPoint prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.EndPointNameList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -48120,26 +58592,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.EndPoint}
+     * Protobuf type {@code context.EndPointNameList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.EndPoint)
-        context.ContextOuterClass.EndPointOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.EndPointNameList)
+        context.ContextOuterClass.EndPointNameListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPointNameList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_EndPointNameList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
+                context.ContextOuterClass.EndPointNameList.class, context.ContextOuterClass.EndPointNameList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.EndPoint.newBuilder()
+      // Construct using context.ContextOuterClass.EndPointNameList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -48152,26 +58624,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getEndpointNamesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
-        } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
-        }
-        endpointType_ = "";
-
-        kpiSampleTypes_ = java.util.Collections.emptyList();
-        bitField0_ = (bitField0_ & ~0x00000001);
-        if (endpointLocationBuilder_ == null) {
-          endpointLocation_ = null;
+        if (endpointNamesBuilder_ == null) {
+          endpointNames_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          endpointLocation_ = null;
-          endpointLocationBuilder_ = null;
+          endpointNamesBuilder_.clear();
         }
         return this;
       }
@@ -48179,17 +58642,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPointNameList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
-        return context.ContextOuterClass.EndPoint.getDefaultInstance();
+      public context.ContextOuterClass.EndPointNameList getDefaultInstanceForType() {
+        return context.ContextOuterClass.EndPointNameList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPoint build() {
-        context.ContextOuterClass.EndPoint result = buildPartial();
+      public context.ContextOuterClass.EndPointNameList build() {
+        context.ContextOuterClass.EndPointNameList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -48197,24 +58660,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPoint buildPartial() {
-        context.ContextOuterClass.EndPoint result = new context.ContextOuterClass.EndPoint(this);
+      public context.ContextOuterClass.EndPointNameList buildPartial() {
+        context.ContextOuterClass.EndPointNameList result = new context.ContextOuterClass.EndPointNameList(this);
         int from_bitField0_ = bitField0_;
-        if (endpointIdBuilder_ == null) {
-          result.endpointId_ = endpointId_;
-        } else {
-          result.endpointId_ = endpointIdBuilder_.build();
-        }
-        result.endpointType_ = endpointType_;
-        if (((bitField0_ & 0x00000001) != 0)) {
-          kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
-          bitField0_ = (bitField0_ & ~0x00000001);
-        }
-        result.kpiSampleTypes_ = kpiSampleTypes_;
-        if (endpointLocationBuilder_ == null) {
-          result.endpointLocation_ = endpointLocation_;
+        if (endpointNamesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            endpointNames_ = java.util.Collections.unmodifiableList(endpointNames_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.endpointNames_ = endpointNames_;
         } else {
-          result.endpointLocation_ = endpointLocationBuilder_.build();
+          result.endpointNames_ = endpointNamesBuilder_.build();
         }
         onBuilt();
         return result;
@@ -48254,35 +58710,41 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.EndPoint) {
-          return mergeFrom((context.ContextOuterClass.EndPoint)other);
+        if (other instanceof context.ContextOuterClass.EndPointNameList) {
+          return mergeFrom((context.ContextOuterClass.EndPointNameList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.EndPoint other) {
-        if (other == context.ContextOuterClass.EndPoint.getDefaultInstance()) return this;
-        if (other.hasEndpointId()) {
-          mergeEndpointId(other.getEndpointId());
-        }
-        if (!other.getEndpointType().isEmpty()) {
-          endpointType_ = other.endpointType_;
-          onChanged();
-        }
-        if (!other.kpiSampleTypes_.isEmpty()) {
-          if (kpiSampleTypes_.isEmpty()) {
-            kpiSampleTypes_ = other.kpiSampleTypes_;
-            bitField0_ = (bitField0_ & ~0x00000001);
-          } else {
-            ensureKpiSampleTypesIsMutable();
-            kpiSampleTypes_.addAll(other.kpiSampleTypes_);
+      public Builder mergeFrom(context.ContextOuterClass.EndPointNameList other) {
+        if (other == context.ContextOuterClass.EndPointNameList.getDefaultInstance()) return this;
+        if (endpointNamesBuilder_ == null) {
+          if (!other.endpointNames_.isEmpty()) {
+            if (endpointNames_.isEmpty()) {
+              endpointNames_ = other.endpointNames_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureEndpointNamesIsMutable();
+              endpointNames_.addAll(other.endpointNames_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.endpointNames_.isEmpty()) {
+            if (endpointNamesBuilder_.isEmpty()) {
+              endpointNamesBuilder_.dispose();
+              endpointNamesBuilder_ = null;
+              endpointNames_ = other.endpointNames_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              endpointNamesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getEndpointNamesFieldBuilder() : null;
+            } else {
+              endpointNamesBuilder_.addAllMessages(other.endpointNames_);
+            }
           }
-          onChanged();
-        }
-        if (other.hasEndpointLocation()) {
-          mergeEndpointLocation(other.getEndpointLocation());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -48299,11 +58761,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.EndPoint parsedMessage = null;
+        context.ContextOuterClass.EndPointNameList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.EndPoint) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.EndPointNameList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -48314,458 +58776,244 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private context.ContextOuterClass.EndPointId endpointId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       * @return Whether the endpointId field is set.
-       */
-      public boolean hasEndpointId() {
-        return endpointIdBuilder_ != null || endpointId_ != null;
+      private java.util.List<context.ContextOuterClass.EndPointName> endpointNames_ =
+        java.util.Collections.emptyList();
+      private void ensureEndpointNamesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          endpointNames_ = new java.util.ArrayList<context.ContextOuterClass.EndPointName>(endpointNames_);
+          bitField0_ |= 0x00000001;
+         }
       }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointName, context.ContextOuterClass.EndPointName.Builder, context.ContextOuterClass.EndPointNameOrBuilder> endpointNamesBuilder_;
+
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       * @return The endpointId.
+       * <code>repeated .context.EndPointName endpoint_names = 1;</code>
        */
-      public context.ContextOuterClass.EndPointId getEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+      public java.util.List<context.ContextOuterClass.EndPointName> getEndpointNamesList() {
+        if (endpointNamesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(endpointNames_);
         } else {
-          return endpointIdBuilder_.getMessage();
+          return endpointNamesBuilder_.getMessageList();
         }
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>repeated .context.EndPointName endpoint_names = 1;</code>
        */
-      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          endpointId_ = value;
-          onChanged();
+      public int getEndpointNamesCount() {
+        if (endpointNamesBuilder_ == null) {
+          return endpointNames_.size();
         } else {
-          endpointIdBuilder_.setMessage(value);
+          return endpointNamesBuilder_.getCount();
         }
-
-        return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>repeated .context.EndPointName endpoint_names = 1;</code>
        */
-      public Builder setEndpointId(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = builderForValue.build();
-          onChanged();
+      public context.ContextOuterClass.EndPointName getEndpointNames(int index) {
+        if (endpointNamesBuilder_ == null) {
+          return endpointNames_.get(index);
         } else {
-          endpointIdBuilder_.setMessage(builderForValue.build());
+          return endpointNamesBuilder_.getMessage(index);
         }
-
-        return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>repeated .context.EndPointName endpoint_names = 1;</code>
        */
-      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
-          if (endpointId_ != null) {
-            endpointId_ =
-              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
-          } else {
-            endpointId_ = value;
+      public Builder setEndpointNames(
+          int index, context.ContextOuterClass.EndPointName value) {
+        if (endpointNamesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureEndpointNamesIsMutable();
+          endpointNames_.set(index, value);
           onChanged();
         } else {
-          endpointIdBuilder_.mergeFrom(value);
+          endpointNamesBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>repeated .context.EndPointName endpoint_names = 1;</code>
        */
-      public Builder clearEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
+      public Builder setEndpointNames(
+          int index, context.ContextOuterClass.EndPointName.Builder builderForValue) {
+        if (endpointNamesBuilder_ == null) {
+          ensureEndpointNamesIsMutable();
+          endpointNames_.set(index, builderForValue.build());
           onChanged();
         } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
+          endpointNamesBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
-        
-        onChanged();
-        return getEndpointIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-        if (endpointIdBuilder_ != null) {
-          return endpointIdBuilder_.getMessageOrBuilder();
-        } else {
-          return endpointId_ == null ?
-              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
-        }
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getEndpointIdFieldBuilder() {
-        if (endpointIdBuilder_ == null) {
-          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  getEndpointId(),
-                  getParentForChildren(),
-                  isClean());
-          endpointId_ = null;
-        }
-        return endpointIdBuilder_;
-      }
-
-      private java.lang.Object endpointType_ = "";
-      /**
-       * <code>string endpoint_type = 2;</code>
-       * @return The endpointType.
-       */
-      public java.lang.String getEndpointType() {
-        java.lang.Object ref = endpointType_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          endpointType_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string endpoint_type = 2;</code>
-       * @return The bytes for endpointType.
+       * <code>repeated .context.EndPointName endpoint_names = 1;</code>
        */
-      public com.google.protobuf.ByteString
-          getEndpointTypeBytes() {
-        java.lang.Object ref = endpointType_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          endpointType_ = b;
-          return b;
+      public Builder addEndpointNames(context.ContextOuterClass.EndPointName value) {
+        if (endpointNamesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureEndpointNamesIsMutable();
+          endpointNames_.add(value);
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          endpointNamesBuilder_.addMessage(value);
         }
-      }
-      /**
-       * <code>string endpoint_type = 2;</code>
-       * @param value The endpointType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setEndpointType(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        endpointType_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string endpoint_type = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearEndpointType() {
-        
-        endpointType_ = getDefaultInstance().getEndpointType();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string endpoint_type = 2;</code>
-       * @param value The bytes for endpointType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setEndpointTypeBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        endpointType_ = value;
-        onChanged();
         return this;
       }
-
-      private java.util.List<java.lang.Integer> kpiSampleTypes_ =
-        java.util.Collections.emptyList();
-      private void ensureKpiSampleTypesIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>(kpiSampleTypes_);
-          bitField0_ |= 0x00000001;
-        }
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @return A list containing the kpiSampleTypes.
-       */
-      public java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList() {
-        return new com.google.protobuf.Internal.ListAdapter<
-            java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>(kpiSampleTypes_, kpiSampleTypes_converter_);
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @return The count of kpiSampleTypes.
-       */
-      public int getKpiSampleTypesCount() {
-        return kpiSampleTypes_.size();
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param index The index of the element to return.
-       * @return The kpiSampleTypes at the given index.
-       */
-      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index) {
-        return kpiSampleTypes_converter_.convert(kpiSampleTypes_.get(index));
-      }
       /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param index The index to set the value at.
-       * @param value The kpiSampleTypes to set.
-       * @return This builder for chaining.
+       * <code>repeated .context.EndPointName endpoint_names = 1;</code>
        */
-      public Builder setKpiSampleTypes(
-          int index, kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
-        if (value == null) {
-          throw new NullPointerException();
+      public Builder addEndpointNames(
+          int index, context.ContextOuterClass.EndPointName value) {
+        if (endpointNamesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureEndpointNamesIsMutable();
+          endpointNames_.add(index, value);
+          onChanged();
+        } else {
+          endpointNamesBuilder_.addMessage(index, value);
         }
-        ensureKpiSampleTypesIsMutable();
-        kpiSampleTypes_.set(index, value.getNumber());
-        onChanged();
         return this;
       }
       /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param value The kpiSampleTypes to add.
-       * @return This builder for chaining.
+       * <code>repeated .context.EndPointName endpoint_names = 1;</code>
        */
-      public Builder addKpiSampleTypes(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
-        if (value == null) {
-          throw new NullPointerException();
+      public Builder addEndpointNames(
+          context.ContextOuterClass.EndPointName.Builder builderForValue) {
+        if (endpointNamesBuilder_ == null) {
+          ensureEndpointNamesIsMutable();
+          endpointNames_.add(builderForValue.build());
+          onChanged();
+        } else {
+          endpointNamesBuilder_.addMessage(builderForValue.build());
         }
-        ensureKpiSampleTypesIsMutable();
-        kpiSampleTypes_.add(value.getNumber());
-        onChanged();
         return this;
       }
       /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param values The kpiSampleTypes to add.
-       * @return This builder for chaining.
+       * <code>repeated .context.EndPointName endpoint_names = 1;</code>
        */
-      public Builder addAllKpiSampleTypes(
-          java.lang.Iterable<? extends kpi_sample_types.KpiSampleTypes.KpiSampleType> values) {
-        ensureKpiSampleTypesIsMutable();
-        for (kpi_sample_types.KpiSampleTypes.KpiSampleType value : values) {
-          kpiSampleTypes_.add(value.getNumber());
+      public Builder addEndpointNames(
+          int index, context.ContextOuterClass.EndPointName.Builder builderForValue) {
+        if (endpointNamesBuilder_ == null) {
+          ensureEndpointNamesIsMutable();
+          endpointNames_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          endpointNamesBuilder_.addMessage(index, builderForValue.build());
         }
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearKpiSampleTypes() {
-        kpiSampleTypes_ = java.util.Collections.emptyList();
-        bitField0_ = (bitField0_ & ~0x00000001);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
-       */
-      public java.util.List<java.lang.Integer>
-      getKpiSampleTypesValueList() {
-        return java.util.Collections.unmodifiableList(kpiSampleTypes_);
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param index The index of the value to return.
-       * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
-       */
-      public int getKpiSampleTypesValue(int index) {
-        return kpiSampleTypes_.get(index);
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param index The index of the value to return.
-       * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
-       * @return This builder for chaining.
-       */
-      public Builder setKpiSampleTypesValue(
-          int index, int value) {
-        ensureKpiSampleTypesIsMutable();
-        kpiSampleTypes_.set(index, value);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param value The enum numeric value on the wire for kpiSampleTypes to add.
-       * @return This builder for chaining.
-       */
-      public Builder addKpiSampleTypesValue(int value) {
-        ensureKpiSampleTypesIsMutable();
-        kpiSampleTypes_.add(value);
-        onChanged();
         return this;
       }
       /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param values The enum numeric values on the wire for kpiSampleTypes to add.
-       * @return This builder for chaining.
+       * <code>repeated .context.EndPointName endpoint_names = 1;</code>
        */
-      public Builder addAllKpiSampleTypesValue(
-          java.lang.Iterable<java.lang.Integer> values) {
-        ensureKpiSampleTypesIsMutable();
-        for (int value : values) {
-          kpiSampleTypes_.add(value);
+      public Builder addAllEndpointNames(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPointName> values) {
+        if (endpointNamesBuilder_ == null) {
+          ensureEndpointNamesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, endpointNames_);
+          onChanged();
+        } else {
+          endpointNamesBuilder_.addAllMessages(values);
         }
-        onChanged();
         return this;
       }
-
-      private context.ContextOuterClass.Location endpointLocation_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> endpointLocationBuilder_;
-      /**
-       * <code>.context.Location endpoint_location = 4;</code>
-       * @return Whether the endpointLocation field is set.
-       */
-      public boolean hasEndpointLocation() {
-        return endpointLocationBuilder_ != null || endpointLocation_ != null;
-      }
       /**
-       * <code>.context.Location endpoint_location = 4;</code>
-       * @return The endpointLocation.
+       * <code>repeated .context.EndPointName endpoint_names = 1;</code>
        */
-      public context.ContextOuterClass.Location getEndpointLocation() {
-        if (endpointLocationBuilder_ == null) {
-          return endpointLocation_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
+      public Builder clearEndpointNames() {
+        if (endpointNamesBuilder_ == null) {
+          endpointNames_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
         } else {
-          return endpointLocationBuilder_.getMessage();
+          endpointNamesBuilder_.clear();
         }
+        return this;
       }
       /**
-       * <code>.context.Location endpoint_location = 4;</code>
+       * <code>repeated .context.EndPointName endpoint_names = 1;</code>
        */
-      public Builder setEndpointLocation(context.ContextOuterClass.Location value) {
-        if (endpointLocationBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          endpointLocation_ = value;
+      public Builder removeEndpointNames(int index) {
+        if (endpointNamesBuilder_ == null) {
+          ensureEndpointNamesIsMutable();
+          endpointNames_.remove(index);
           onChanged();
         } else {
-          endpointLocationBuilder_.setMessage(value);
+          endpointNamesBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.Location endpoint_location = 4;</code>
+       * <code>repeated .context.EndPointName endpoint_names = 1;</code>
        */
-      public Builder setEndpointLocation(
-          context.ContextOuterClass.Location.Builder builderForValue) {
-        if (endpointLocationBuilder_ == null) {
-          endpointLocation_ = builderForValue.build();
-          onChanged();
-        } else {
-          endpointLocationBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
+      public context.ContextOuterClass.EndPointName.Builder getEndpointNamesBuilder(
+          int index) {
+        return getEndpointNamesFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>.context.Location endpoint_location = 4;</code>
+       * <code>repeated .context.EndPointName endpoint_names = 1;</code>
        */
-      public Builder mergeEndpointLocation(context.ContextOuterClass.Location value) {
-        if (endpointLocationBuilder_ == null) {
-          if (endpointLocation_ != null) {
-            endpointLocation_ =
-              context.ContextOuterClass.Location.newBuilder(endpointLocation_).mergeFrom(value).buildPartial();
-          } else {
-            endpointLocation_ = value;
-          }
-          onChanged();
-        } else {
-          endpointLocationBuilder_.mergeFrom(value);
+      public context.ContextOuterClass.EndPointNameOrBuilder getEndpointNamesOrBuilder(
+          int index) {
+        if (endpointNamesBuilder_ == null) {
+          return endpointNames_.get(index);  } else {
+          return endpointNamesBuilder_.getMessageOrBuilder(index);
         }
-
-        return this;
       }
       /**
-       * <code>.context.Location endpoint_location = 4;</code>
+       * <code>repeated .context.EndPointName endpoint_names = 1;</code>
        */
-      public Builder clearEndpointLocation() {
-        if (endpointLocationBuilder_ == null) {
-          endpointLocation_ = null;
-          onChanged();
+      public java.util.List<? extends context.ContextOuterClass.EndPointNameOrBuilder> 
+           getEndpointNamesOrBuilderList() {
+        if (endpointNamesBuilder_ != null) {
+          return endpointNamesBuilder_.getMessageOrBuilderList();
         } else {
-          endpointLocation_ = null;
-          endpointLocationBuilder_ = null;
+          return java.util.Collections.unmodifiableList(endpointNames_);
         }
-
-        return this;
       }
       /**
-       * <code>.context.Location endpoint_location = 4;</code>
+       * <code>repeated .context.EndPointName endpoint_names = 1;</code>
        */
-      public context.ContextOuterClass.Location.Builder getEndpointLocationBuilder() {
-        
-        onChanged();
-        return getEndpointLocationFieldBuilder().getBuilder();
+      public context.ContextOuterClass.EndPointName.Builder addEndpointNamesBuilder() {
+        return getEndpointNamesFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPointName.getDefaultInstance());
       }
       /**
-       * <code>.context.Location endpoint_location = 4;</code>
+       * <code>repeated .context.EndPointName endpoint_names = 1;</code>
        */
-      public context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder() {
-        if (endpointLocationBuilder_ != null) {
-          return endpointLocationBuilder_.getMessageOrBuilder();
-        } else {
-          return endpointLocation_ == null ?
-              context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
-        }
+      public context.ContextOuterClass.EndPointName.Builder addEndpointNamesBuilder(
+          int index) {
+        return getEndpointNamesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPointName.getDefaultInstance());
       }
       /**
-       * <code>.context.Location endpoint_location = 4;</code>
+       * <code>repeated .context.EndPointName endpoint_names = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> 
-          getEndpointLocationFieldBuilder() {
-        if (endpointLocationBuilder_ == null) {
-          endpointLocationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder>(
-                  getEndpointLocation(),
+      public java.util.List<context.ContextOuterClass.EndPointName.Builder> 
+           getEndpointNamesBuilderList() {
+        return getEndpointNamesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointName, context.ContextOuterClass.EndPointName.Builder, context.ContextOuterClass.EndPointNameOrBuilder> 
+          getEndpointNamesFieldBuilder() {
+        if (endpointNamesBuilder_ == null) {
+          endpointNamesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPointName, context.ContextOuterClass.EndPointName.Builder, context.ContextOuterClass.EndPointNameOrBuilder>(
+                  endpointNames_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          endpointLocation_ = null;
+          endpointNames_ = null;
         }
-        return endpointLocationBuilder_;
+        return endpointNamesBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -48780,41 +59028,41 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.EndPoint)
+      // @@protoc_insertion_point(builder_scope:context.EndPointNameList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.EndPoint)
-    private static final context.ContextOuterClass.EndPoint DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.EndPointNameList)
+    private static final context.ContextOuterClass.EndPointNameList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPoint();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPointNameList();
     }
 
-    public static context.ContextOuterClass.EndPoint getDefaultInstance() {
+    public static context.ContextOuterClass.EndPointNameList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<EndPoint>
-        PARSER = new com.google.protobuf.AbstractParser<EndPoint>() {
+    private static final com.google.protobuf.Parser<EndPointNameList>
+        PARSER = new com.google.protobuf.AbstractParser<EndPointNameList>() {
       @java.lang.Override
-      public EndPoint parsePartialFrom(
+      public EndPointNameList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new EndPoint(input, extensionRegistry);
+        return new EndPointNameList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<EndPoint> parser() {
+    public static com.google.protobuf.Parser<EndPointNameList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<EndPoint> getParserForType() {
+    public com.google.protobuf.Parser<EndPointNameList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
+    public context.ContextOuterClass.EndPointNameList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
@@ -56204,18 +66452,524 @@ public final class ContextOuterClass {
       // @@protoc_insertion_point(message_implements:context.Constraint_SLA_Capacity)
       Constraint_SLA_CapacityOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Constraint_SLA_Capacity.newBuilder() to construct.
-    private Constraint_SLA_Capacity(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint_SLA_Capacity.newBuilder() to construct.
+    private Constraint_SLA_Capacity(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Constraint_SLA_Capacity() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Constraint_SLA_Capacity();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Constraint_SLA_Capacity(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 13: {
+
+              capacityGbps_ = input.readFloat();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Capacity_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Capacity_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Constraint_SLA_Capacity.class, context.ContextOuterClass.Constraint_SLA_Capacity.Builder.class);
+    }
+
+    public static final int CAPACITY_GBPS_FIELD_NUMBER = 1;
+    private float capacityGbps_;
+    /**
+     * <code>float capacity_gbps = 1;</code>
+     * @return The capacityGbps.
+     */
+    @java.lang.Override
+    public float getCapacityGbps() {
+      return capacityGbps_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (capacityGbps_ != 0F) {
+        output.writeFloat(1, capacityGbps_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (capacityGbps_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(1, capacityGbps_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.Constraint_SLA_Capacity)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Constraint_SLA_Capacity other = (context.ContextOuterClass.Constraint_SLA_Capacity) obj;
+
+      if (java.lang.Float.floatToIntBits(getCapacityGbps())
+          != java.lang.Float.floatToIntBits(
+              other.getCapacityGbps())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + CAPACITY_GBPS_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getCapacityGbps());
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_SLA_Capacity prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.Constraint_SLA_Capacity}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Constraint_SLA_Capacity)
+        context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Capacity_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Capacity_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Constraint_SLA_Capacity.class, context.ContextOuterClass.Constraint_SLA_Capacity.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Constraint_SLA_Capacity.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        capacityGbps_ = 0F;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Capacity_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_SLA_Capacity getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_SLA_Capacity build() {
+        context.ContextOuterClass.Constraint_SLA_Capacity result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_SLA_Capacity buildPartial() {
+        context.ContextOuterClass.Constraint_SLA_Capacity result = new context.ContextOuterClass.Constraint_SLA_Capacity(this);
+        result.capacityGbps_ = capacityGbps_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Constraint_SLA_Capacity) {
+          return mergeFrom((context.ContextOuterClass.Constraint_SLA_Capacity)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_SLA_Capacity other) {
+        if (other == context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance()) return this;
+        if (other.getCapacityGbps() != 0F) {
+          setCapacityGbps(other.getCapacityGbps());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Constraint_SLA_Capacity parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Constraint_SLA_Capacity) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private float capacityGbps_ ;
+      /**
+       * <code>float capacity_gbps = 1;</code>
+       * @return The capacityGbps.
+       */
+      @java.lang.Override
+      public float getCapacityGbps() {
+        return capacityGbps_;
+      }
+      /**
+       * <code>float capacity_gbps = 1;</code>
+       * @param value The capacityGbps to set.
+       * @return This builder for chaining.
+       */
+      public Builder setCapacityGbps(float value) {
+        
+        capacityGbps_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>float capacity_gbps = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearCapacityGbps() {
+        
+        capacityGbps_ = 0F;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.Constraint_SLA_Capacity)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Constraint_SLA_Capacity)
+    private static final context.ContextOuterClass.Constraint_SLA_Capacity DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_SLA_Capacity();
+    }
+
+    public static context.ContextOuterClass.Constraint_SLA_Capacity getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Constraint_SLA_Capacity>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_SLA_Capacity>() {
+      @java.lang.Override
+      public Constraint_SLA_Capacity parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Constraint_SLA_Capacity(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Constraint_SLA_Capacity> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Constraint_SLA_Capacity> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_SLA_Capacity getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface Constraint_SLA_AvailabilityOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_SLA_Availability)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>uint32 num_disjoint_paths = 1;</code>
+     * @return The numDisjointPaths.
+     */
+    int getNumDisjointPaths();
+
+    /**
+     * <code>bool all_active = 2;</code>
+     * @return The allActive.
+     */
+    boolean getAllActive();
+
+    /**
+     * <pre>
+     * 0.0 .. 100.0 percentage of availability
+     * </pre>
+     *
+     * <code>float availability = 3;</code>
+     * @return The availability.
+     */
+    float getAvailability();
+  }
+  /**
+   * Protobuf type {@code context.Constraint_SLA_Availability}
+   */
+  public static final class Constraint_SLA_Availability extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Constraint_SLA_Availability)
+      Constraint_SLA_AvailabilityOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Constraint_SLA_Availability.newBuilder() to construct.
+    private Constraint_SLA_Availability(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Constraint_SLA_Capacity() {
+    private Constraint_SLA_Availability() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Constraint_SLA_Capacity();
+      return new Constraint_SLA_Availability();
     }
 
     @java.lang.Override
@@ -56223,7 +66977,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Constraint_SLA_Capacity(
+    private Constraint_SLA_Availability(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -56241,9 +66995,19 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 13: {
+            case 8: {
 
-              capacityGbps_ = input.readFloat();
+              numDisjointPaths_ = input.readUInt32();
+              break;
+            }
+            case 16: {
+
+              allActive_ = input.readBool();
+              break;
+            }
+            case 29: {
+
+              availability_ = input.readFloat();
               break;
             }
             default: {
@@ -56267,26 +67031,52 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Capacity_descriptor;
+      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Availability_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Capacity_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Availability_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Constraint_SLA_Capacity.class, context.ContextOuterClass.Constraint_SLA_Capacity.Builder.class);
+              context.ContextOuterClass.Constraint_SLA_Availability.class, context.ContextOuterClass.Constraint_SLA_Availability.Builder.class);
     }
 
-    public static final int CAPACITY_GBPS_FIELD_NUMBER = 1;
-    private float capacityGbps_;
+    public static final int NUM_DISJOINT_PATHS_FIELD_NUMBER = 1;
+    private int numDisjointPaths_;
     /**
-     * <code>float capacity_gbps = 1;</code>
-     * @return The capacityGbps.
+     * <code>uint32 num_disjoint_paths = 1;</code>
+     * @return The numDisjointPaths.
      */
     @java.lang.Override
-    public float getCapacityGbps() {
-      return capacityGbps_;
+    public int getNumDisjointPaths() {
+      return numDisjointPaths_;
+    }
+
+    public static final int ALL_ACTIVE_FIELD_NUMBER = 2;
+    private boolean allActive_;
+    /**
+     * <code>bool all_active = 2;</code>
+     * @return The allActive.
+     */
+    @java.lang.Override
+    public boolean getAllActive() {
+      return allActive_;
+    }
+
+    public static final int AVAILABILITY_FIELD_NUMBER = 3;
+    private float availability_;
+    /**
+     * <pre>
+     * 0.0 .. 100.0 percentage of availability
+     * </pre>
+     *
+     * <code>float availability = 3;</code>
+     * @return The availability.
+     */
+    @java.lang.Override
+    public float getAvailability() {
+      return availability_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -56303,8 +67093,14 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (capacityGbps_ != 0F) {
-        output.writeFloat(1, capacityGbps_);
+      if (numDisjointPaths_ != 0) {
+        output.writeUInt32(1, numDisjointPaths_);
+      }
+      if (allActive_ != false) {
+        output.writeBool(2, allActive_);
+      }
+      if (availability_ != 0F) {
+        output.writeFloat(3, availability_);
       }
       unknownFields.writeTo(output);
     }
@@ -56315,9 +67111,17 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (capacityGbps_ != 0F) {
+      if (numDisjointPaths_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(1, capacityGbps_);
+          .computeUInt32Size(1, numDisjointPaths_);
+      }
+      if (allActive_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(2, allActive_);
+      }
+      if (availability_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(3, availability_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -56329,14 +67133,18 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Constraint_SLA_Capacity)) {
+      if (!(obj instanceof context.ContextOuterClass.Constraint_SLA_Availability)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Constraint_SLA_Capacity other = (context.ContextOuterClass.Constraint_SLA_Capacity) obj;
+      context.ContextOuterClass.Constraint_SLA_Availability other = (context.ContextOuterClass.Constraint_SLA_Availability) obj;
 
-      if (java.lang.Float.floatToIntBits(getCapacityGbps())
+      if (getNumDisjointPaths()
+          != other.getNumDisjointPaths()) return false;
+      if (getAllActive()
+          != other.getAllActive()) return false;
+      if (java.lang.Float.floatToIntBits(getAvailability())
           != java.lang.Float.floatToIntBits(
-              other.getCapacityGbps())) return false;
+              other.getAvailability())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -56348,77 +67156,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + CAPACITY_GBPS_FIELD_NUMBER;
+      hash = (37 * hash) + NUM_DISJOINT_PATHS_FIELD_NUMBER;
+      hash = (53 * hash) + getNumDisjointPaths();
+      hash = (37 * hash) + ALL_ACTIVE_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getAllActive());
+      hash = (37 * hash) + AVAILABILITY_FIELD_NUMBER;
       hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getCapacityGbps());
+          getAvailability());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(byte[] data)
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Capacity parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Capacity parseDelimitedFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -56431,7 +67244,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Constraint_SLA_Capacity prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_SLA_Availability prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -56447,26 +67260,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Constraint_SLA_Capacity}
+     * Protobuf type {@code context.Constraint_SLA_Availability}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Constraint_SLA_Capacity)
-        context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Constraint_SLA_Availability)
+        context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Capacity_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Availability_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Capacity_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Availability_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Constraint_SLA_Capacity.class, context.ContextOuterClass.Constraint_SLA_Capacity.Builder.class);
+                context.ContextOuterClass.Constraint_SLA_Availability.class, context.ContextOuterClass.Constraint_SLA_Availability.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Constraint_SLA_Capacity.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_SLA_Availability.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -56484,7 +67297,11 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        capacityGbps_ = 0F;
+        numDisjointPaths_ = 0;
+
+        allActive_ = false;
+
+        availability_ = 0F;
 
         return this;
       }
@@ -56492,17 +67309,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Capacity_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Availability_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_SLA_Capacity getDefaultInstanceForType() {
-        return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_SLA_Availability getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_SLA_Capacity build() {
-        context.ContextOuterClass.Constraint_SLA_Capacity result = buildPartial();
+      public context.ContextOuterClass.Constraint_SLA_Availability build() {
+        context.ContextOuterClass.Constraint_SLA_Availability result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -56510,9 +67327,11 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_SLA_Capacity buildPartial() {
-        context.ContextOuterClass.Constraint_SLA_Capacity result = new context.ContextOuterClass.Constraint_SLA_Capacity(this);
-        result.capacityGbps_ = capacityGbps_;
+      public context.ContextOuterClass.Constraint_SLA_Availability buildPartial() {
+        context.ContextOuterClass.Constraint_SLA_Availability result = new context.ContextOuterClass.Constraint_SLA_Availability(this);
+        result.numDisjointPaths_ = numDisjointPaths_;
+        result.allActive_ = allActive_;
+        result.availability_ = availability_;
         onBuilt();
         return result;
       }
@@ -56551,18 +67370,24 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Constraint_SLA_Capacity) {
-          return mergeFrom((context.ContextOuterClass.Constraint_SLA_Capacity)other);
+        if (other instanceof context.ContextOuterClass.Constraint_SLA_Availability) {
+          return mergeFrom((context.ContextOuterClass.Constraint_SLA_Availability)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Constraint_SLA_Capacity other) {
-        if (other == context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance()) return this;
-        if (other.getCapacityGbps() != 0F) {
-          setCapacityGbps(other.getCapacityGbps());
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_SLA_Availability other) {
+        if (other == context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance()) return this;
+        if (other.getNumDisjointPaths() != 0) {
+          setNumDisjointPaths(other.getNumDisjointPaths());
+        }
+        if (other.getAllActive() != false) {
+          setAllActive(other.getAllActive());
+        }
+        if (other.getAvailability() != 0F) {
+          setAvailability(other.getAvailability());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -56579,11 +67404,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Constraint_SLA_Capacity parsedMessage = null;
+        context.ContextOuterClass.Constraint_SLA_Availability parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Constraint_SLA_Capacity) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Constraint_SLA_Availability) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -56593,33 +67418,107 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private float capacityGbps_ ;
+      private int numDisjointPaths_ ;
       /**
-       * <code>float capacity_gbps = 1;</code>
-       * @return The capacityGbps.
+       * <code>uint32 num_disjoint_paths = 1;</code>
+       * @return The numDisjointPaths.
        */
       @java.lang.Override
-      public float getCapacityGbps() {
-        return capacityGbps_;
+      public int getNumDisjointPaths() {
+        return numDisjointPaths_;
       }
       /**
-       * <code>float capacity_gbps = 1;</code>
-       * @param value The capacityGbps to set.
+       * <code>uint32 num_disjoint_paths = 1;</code>
+       * @param value The numDisjointPaths to set.
        * @return This builder for chaining.
        */
-      public Builder setCapacityGbps(float value) {
+      public Builder setNumDisjointPaths(int value) {
         
-        capacityGbps_ = value;
+        numDisjointPaths_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>float capacity_gbps = 1;</code>
+       * <code>uint32 num_disjoint_paths = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder clearCapacityGbps() {
+      public Builder clearNumDisjointPaths() {
         
-        capacityGbps_ = 0F;
+        numDisjointPaths_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private boolean allActive_ ;
+      /**
+       * <code>bool all_active = 2;</code>
+       * @return The allActive.
+       */
+      @java.lang.Override
+      public boolean getAllActive() {
+        return allActive_;
+      }
+      /**
+       * <code>bool all_active = 2;</code>
+       * @param value The allActive to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAllActive(boolean value) {
+        
+        allActive_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>bool all_active = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAllActive() {
+        
+        allActive_ = false;
+        onChanged();
+        return this;
+      }
+
+      private float availability_ ;
+      /**
+       * <pre>
+       * 0.0 .. 100.0 percentage of availability
+       * </pre>
+       *
+       * <code>float availability = 3;</code>
+       * @return The availability.
+       */
+      @java.lang.Override
+      public float getAvailability() {
+        return availability_;
+      }
+      /**
+       * <pre>
+       * 0.0 .. 100.0 percentage of availability
+       * </pre>
+       *
+       * <code>float availability = 3;</code>
+       * @param value The availability to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAvailability(float value) {
+        
+        availability_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       * 0.0 .. 100.0 percentage of availability
+       * </pre>
+       *
+       * <code>float availability = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAvailability() {
+        
+        availability_ = 0F;
         onChanged();
         return this;
       }
@@ -56636,82 +67535,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Constraint_SLA_Capacity)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_SLA_Availability)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Constraint_SLA_Capacity)
-    private static final context.ContextOuterClass.Constraint_SLA_Capacity DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint_SLA_Availability)
+    private static final context.ContextOuterClass.Constraint_SLA_Availability DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_SLA_Capacity();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_SLA_Availability();
     }
 
-    public static context.ContextOuterClass.Constraint_SLA_Capacity getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_SLA_Availability getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Constraint_SLA_Capacity>
-        PARSER = new com.google.protobuf.AbstractParser<Constraint_SLA_Capacity>() {
+    private static final com.google.protobuf.Parser<Constraint_SLA_Availability>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_SLA_Availability>() {
       @java.lang.Override
-      public Constraint_SLA_Capacity parsePartialFrom(
+      public Constraint_SLA_Availability parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Constraint_SLA_Capacity(input, extensionRegistry);
+        return new Constraint_SLA_Availability(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Constraint_SLA_Capacity> parser() {
+    public static com.google.protobuf.Parser<Constraint_SLA_Availability> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Constraint_SLA_Capacity> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_SLA_Availability> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Constraint_SLA_Capacity getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_SLA_Availability getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface Constraint_SLA_AvailabilityOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Constraint_SLA_Availability)
+  public interface Constraint_SLA_Isolation_levelOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_SLA_Isolation_level)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>uint32 num_disjoint_paths = 1;</code>
-     * @return The numDisjointPaths.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return A list containing the isolationLevel.
      */
-    int getNumDisjointPaths();
-
+    java.util.List<context.ContextOuterClass.IsolationLevelEnum> getIsolationLevelList();
     /**
-     * <code>bool all_active = 2;</code>
-     * @return The allActive.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return The count of isolationLevel.
      */
-    boolean getAllActive();
+    int getIsolationLevelCount();
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @param index The index of the element to return.
+     * @return The isolationLevel at the given index.
+     */
+    context.ContextOuterClass.IsolationLevelEnum getIsolationLevel(int index);
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return A list containing the enum numeric values on the wire for isolationLevel.
+     */
+    java.util.List<java.lang.Integer>
+    getIsolationLevelValueList();
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of isolationLevel at the given index.
+     */
+    int getIsolationLevelValue(int index);
   }
   /**
-   * Protobuf type {@code context.Constraint_SLA_Availability}
+   * Protobuf type {@code context.Constraint_SLA_Isolation_level}
    */
-  public static final class Constraint_SLA_Availability extends
+  public static final class Constraint_SLA_Isolation_level extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Constraint_SLA_Availability)
-      Constraint_SLA_AvailabilityOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Constraint_SLA_Isolation_level)
+      Constraint_SLA_Isolation_levelOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Constraint_SLA_Availability.newBuilder() to construct.
-    private Constraint_SLA_Availability(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint_SLA_Isolation_level.newBuilder() to construct.
+    private Constraint_SLA_Isolation_level(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Constraint_SLA_Availability() {
+    private Constraint_SLA_Isolation_level() {
+      isolationLevel_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Constraint_SLA_Availability();
+      return new Constraint_SLA_Isolation_level();
     }
 
     @java.lang.Override
@@ -56719,7 +67636,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Constraint_SLA_Availability(
+    private Constraint_SLA_Isolation_level(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -56727,6 +67644,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -56738,13 +67656,31 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 8: {
-
-              numDisjointPaths_ = input.readUInt32();
+              int rawValue = input.readEnum();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                isolationLevel_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              isolationLevel_.add(rawValue);
               break;
             }
-            case 16: {
+            case 10: {
+              int length = input.readRawVarint32();
+              int oldLimit = input.pushLimit(length);
+              while(input.getBytesUntilLimit() > 0) {
+                int rawValue = input.readEnum();
+                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                  isolationLevel_ = new java.util.ArrayList<java.lang.Integer>();
+                  mutable_bitField0_ |= 0x00000001;
+                }
+                isolationLevel_.add(rawValue);
+              }
+              input.popLimit(oldLimit);
+              break;
+            }
+            case 29: {
 
-              allActive_ = input.readBool();
+              availability_ = input.readFloat();
               break;
             }
             default: {
@@ -56762,43 +67698,97 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          isolationLevel_ = java.util.Collections.unmodifiableList(isolationLevel_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Availability_descriptor;
+      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Isolation_level_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Availability_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Isolation_level_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Constraint_SLA_Availability.class, context.ContextOuterClass.Constraint_SLA_Availability.Builder.class);
+              context.ContextOuterClass.Constraint_SLA_Isolation_level.class, context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder.class);
     }
 
-    public static final int NUM_DISJOINT_PATHS_FIELD_NUMBER = 1;
-    private int numDisjointPaths_;
+    public static final int ISOLATION_LEVEL_FIELD_NUMBER = 1;
+    private java.util.List<java.lang.Integer> isolationLevel_;
+    private static final com.google.protobuf.Internal.ListAdapter.Converter<
+        java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum> isolationLevel_converter_ =
+            new com.google.protobuf.Internal.ListAdapter.Converter<
+                java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum>() {
+              public context.ContextOuterClass.IsolationLevelEnum convert(java.lang.Integer from) {
+                @SuppressWarnings("deprecation")
+                context.ContextOuterClass.IsolationLevelEnum result = context.ContextOuterClass.IsolationLevelEnum.valueOf(from);
+                return result == null ? context.ContextOuterClass.IsolationLevelEnum.UNRECOGNIZED : result;
+              }
+            };
     /**
-     * <code>uint32 num_disjoint_paths = 1;</code>
-     * @return The numDisjointPaths.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return A list containing the isolationLevel.
      */
     @java.lang.Override
-    public int getNumDisjointPaths() {
-      return numDisjointPaths_;
+    public java.util.List<context.ContextOuterClass.IsolationLevelEnum> getIsolationLevelList() {
+      return new com.google.protobuf.Internal.ListAdapter<
+          java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum>(isolationLevel_, isolationLevel_converter_);
+    }
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return The count of isolationLevel.
+     */
+    @java.lang.Override
+    public int getIsolationLevelCount() {
+      return isolationLevel_.size();
+    }
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @param index The index of the element to return.
+     * @return The isolationLevel at the given index.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.IsolationLevelEnum getIsolationLevel(int index) {
+      return isolationLevel_converter_.convert(isolationLevel_.get(index));
+    }
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return A list containing the enum numeric values on the wire for isolationLevel.
+     */
+    @java.lang.Override
+    public java.util.List<java.lang.Integer>
+    getIsolationLevelValueList() {
+      return isolationLevel_;
+    }
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of isolationLevel at the given index.
+     */
+    @java.lang.Override
+    public int getIsolationLevelValue(int index) {
+      return isolationLevel_.get(index);
     }
+    private int isolationLevelMemoizedSerializedSize;
 
-    public static final int ALL_ACTIVE_FIELD_NUMBER = 2;
-    private boolean allActive_;
+    public static final int AVAILABILITY_FIELD_NUMBER = 3;
+    private float availability_;
     /**
-     * <code>bool all_active = 2;</code>
-     * @return The allActive.
+     * <pre>
+     * 0.0 .. 100.0 percentage of availability
+     * </pre>
+     *
+     * <code>float availability = 3;</code>
+     * @return The availability.
      */
     @java.lang.Override
-    public boolean getAllActive() {
-      return allActive_;
+    public float getAvailability() {
+      return availability_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -56815,11 +67805,16 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (numDisjointPaths_ != 0) {
-        output.writeUInt32(1, numDisjointPaths_);
+      getSerializedSize();
+      if (getIsolationLevelList().size() > 0) {
+        output.writeUInt32NoTag(10);
+        output.writeUInt32NoTag(isolationLevelMemoizedSerializedSize);
       }
-      if (allActive_ != false) {
-        output.writeBool(2, allActive_);
+      for (int i = 0; i < isolationLevel_.size(); i++) {
+        output.writeEnumNoTag(isolationLevel_.get(i));
+      }
+      if (availability_ != 0F) {
+        output.writeFloat(3, availability_);
       }
       unknownFields.writeTo(output);
     }
@@ -56830,13 +67825,21 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (numDisjointPaths_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(1, numDisjointPaths_);
+      {
+        int dataSize = 0;
+        for (int i = 0; i < isolationLevel_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeEnumSizeNoTag(isolationLevel_.get(i));
+        }
+        size += dataSize;
+        if (!getIsolationLevelList().isEmpty()) {  size += 1;
+          size += com.google.protobuf.CodedOutputStream
+            .computeUInt32SizeNoTag(dataSize);
+        }isolationLevelMemoizedSerializedSize = dataSize;
       }
-      if (allActive_ != false) {
+      if (availability_ != 0F) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(2, allActive_);
+          .computeFloatSize(3, availability_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -56848,15 +67851,12 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Constraint_SLA_Availability)) {
+      if (!(obj instanceof context.ContextOuterClass.Constraint_SLA_Isolation_level)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Constraint_SLA_Availability other = (context.ContextOuterClass.Constraint_SLA_Availability) obj;
+      context.ContextOuterClass.Constraint_SLA_Isolation_level other = (context.ContextOuterClass.Constraint_SLA_Isolation_level) obj;
 
-      if (getNumDisjointPaths()
-          != other.getNumDisjointPaths()) return false;
-      if (getAllActive()
-          != other.getAllActive()) return false;
+      if (!isolationLevel_.equals(other.isolationLevel_)) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -56868,79 +67868,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + NUM_DISJOINT_PATHS_FIELD_NUMBER;
-      hash = (53 * hash) + getNumDisjointPaths();
-      hash = (37 * hash) + ALL_ACTIVE_FIELD_NUMBER;
-      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
-          getAllActive());
+      if (getIsolationLevelCount() > 0) {
+        hash = (37 * hash) + ISOLATION_LEVEL_FIELD_NUMBER;
+        hash = (53 * hash) + isolationLevel_.hashCode();
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(byte[] data)
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Availability parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Availability parseDelimitedFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -56953,7 +67952,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Constraint_SLA_Availability prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_SLA_Isolation_level prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -56969,26 +67968,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Constraint_SLA_Availability}
+     * Protobuf type {@code context.Constraint_SLA_Isolation_level}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Constraint_SLA_Availability)
-        context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Constraint_SLA_Isolation_level)
+        context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Availability_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Isolation_level_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Availability_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Isolation_level_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Constraint_SLA_Availability.class, context.ContextOuterClass.Constraint_SLA_Availability.Builder.class);
+                context.ContextOuterClass.Constraint_SLA_Isolation_level.class, context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Constraint_SLA_Availability.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -57006,27 +68005,25 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        numDisjointPaths_ = 0;
-
-        allActive_ = false;
-
+        isolationLevel_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Availability_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Isolation_level_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_SLA_Availability getDefaultInstanceForType() {
-        return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_SLA_Isolation_level getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_SLA_Availability build() {
-        context.ContextOuterClass.Constraint_SLA_Availability result = buildPartial();
+      public context.ContextOuterClass.Constraint_SLA_Isolation_level build() {
+        context.ContextOuterClass.Constraint_SLA_Isolation_level result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -57034,10 +68031,14 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_SLA_Availability buildPartial() {
-        context.ContextOuterClass.Constraint_SLA_Availability result = new context.ContextOuterClass.Constraint_SLA_Availability(this);
-        result.numDisjointPaths_ = numDisjointPaths_;
-        result.allActive_ = allActive_;
+      public context.ContextOuterClass.Constraint_SLA_Isolation_level buildPartial() {
+        context.ContextOuterClass.Constraint_SLA_Isolation_level result = new context.ContextOuterClass.Constraint_SLA_Isolation_level(this);
+        int from_bitField0_ = bitField0_;
+        if (((bitField0_ & 0x00000001) != 0)) {
+          isolationLevel_ = java.util.Collections.unmodifiableList(isolationLevel_);
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
+        result.isolationLevel_ = isolationLevel_;
         onBuilt();
         return result;
       }
@@ -57076,21 +68077,28 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Constraint_SLA_Availability) {
-          return mergeFrom((context.ContextOuterClass.Constraint_SLA_Availability)other);
+        if (other instanceof context.ContextOuterClass.Constraint_SLA_Isolation_level) {
+          return mergeFrom((context.ContextOuterClass.Constraint_SLA_Isolation_level)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Constraint_SLA_Availability other) {
-        if (other == context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance()) return this;
-        if (other.getNumDisjointPaths() != 0) {
-          setNumDisjointPaths(other.getNumDisjointPaths());
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_SLA_Isolation_level other) {
+        if (other == context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance()) return this;
+        if (!other.isolationLevel_.isEmpty()) {
+          if (isolationLevel_.isEmpty()) {
+            isolationLevel_ = other.isolationLevel_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureIsolationLevelIsMutable();
+            isolationLevel_.addAll(other.isolationLevel_);
+          }
+          onChanged();
         }
-        if (other.getAllActive() != false) {
-          setAllActive(other.getAllActive());
+        if (other.getAvailability() != 0F) {
+          setAvailability(other.getAvailability());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -57107,11 +68115,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Constraint_SLA_Availability parsedMessage = null;
+        context.ContextOuterClass.Constraint_SLA_Isolation_level parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Constraint_SLA_Availability) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Constraint_SLA_Isolation_level) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -57120,65 +68128,187 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
 
-      private int numDisjointPaths_ ;
+      private java.util.List<java.lang.Integer> isolationLevel_ =
+        java.util.Collections.emptyList();
+      private void ensureIsolationLevelIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          isolationLevel_ = new java.util.ArrayList<java.lang.Integer>(isolationLevel_);
+          bitField0_ |= 0x00000001;
+        }
+      }
       /**
-       * <code>uint32 num_disjoint_paths = 1;</code>
-       * @return The numDisjointPaths.
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @return A list containing the isolationLevel.
        */
-      @java.lang.Override
-      public int getNumDisjointPaths() {
-        return numDisjointPaths_;
+      public java.util.List<context.ContextOuterClass.IsolationLevelEnum> getIsolationLevelList() {
+        return new com.google.protobuf.Internal.ListAdapter<
+            java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum>(isolationLevel_, isolationLevel_converter_);
       }
       /**
-       * <code>uint32 num_disjoint_paths = 1;</code>
-       * @param value The numDisjointPaths to set.
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @return The count of isolationLevel.
+       */
+      public int getIsolationLevelCount() {
+        return isolationLevel_.size();
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param index The index of the element to return.
+       * @return The isolationLevel at the given index.
+       */
+      public context.ContextOuterClass.IsolationLevelEnum getIsolationLevel(int index) {
+        return isolationLevel_converter_.convert(isolationLevel_.get(index));
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param index The index to set the value at.
+       * @param value The isolationLevel to set.
        * @return This builder for chaining.
        */
-      public Builder setNumDisjointPaths(int value) {
-        
-        numDisjointPaths_ = value;
+      public Builder setIsolationLevel(
+          int index, context.ContextOuterClass.IsolationLevelEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureIsolationLevelIsMutable();
+        isolationLevel_.set(index, value.getNumber());
         onChanged();
         return this;
       }
       /**
-       * <code>uint32 num_disjoint_paths = 1;</code>
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param value The isolationLevel to add.
        * @return This builder for chaining.
        */
-      public Builder clearNumDisjointPaths() {
-        
-        numDisjointPaths_ = 0;
+      public Builder addIsolationLevel(context.ContextOuterClass.IsolationLevelEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureIsolationLevelIsMutable();
+        isolationLevel_.add(value.getNumber());
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param values The isolationLevel to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllIsolationLevel(
+          java.lang.Iterable<? extends context.ContextOuterClass.IsolationLevelEnum> values) {
+        ensureIsolationLevelIsMutable();
+        for (context.ContextOuterClass.IsolationLevelEnum value : values) {
+          isolationLevel_.add(value.getNumber());
+        }
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIsolationLevel() {
+        isolationLevel_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @return A list containing the enum numeric values on the wire for isolationLevel.
+       */
+      public java.util.List<java.lang.Integer>
+      getIsolationLevelValueList() {
+        return java.util.Collections.unmodifiableList(isolationLevel_);
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of isolationLevel at the given index.
+       */
+      public int getIsolationLevelValue(int index) {
+        return isolationLevel_.get(index);
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of isolationLevel at the given index.
+       * @return This builder for chaining.
+       */
+      public Builder setIsolationLevelValue(
+          int index, int value) {
+        ensureIsolationLevelIsMutable();
+        isolationLevel_.set(index, value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param value The enum numeric value on the wire for isolationLevel to add.
+       * @return This builder for chaining.
+       */
+      public Builder addIsolationLevelValue(int value) {
+        ensureIsolationLevelIsMutable();
+        isolationLevel_.add(value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param values The enum numeric values on the wire for isolationLevel to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllIsolationLevelValue(
+          java.lang.Iterable<java.lang.Integer> values) {
+        ensureIsolationLevelIsMutable();
+        for (int value : values) {
+          isolationLevel_.add(value);
+        }
         onChanged();
         return this;
       }
 
-      private boolean allActive_ ;
+      private float availability_ ;
       /**
-       * <code>bool all_active = 2;</code>
-       * @return The allActive.
+       * <pre>
+       * 0.0 .. 100.0 percentage of availability
+       * </pre>
+       *
+       * <code>float availability = 3;</code>
+       * @return The availability.
        */
       @java.lang.Override
-      public boolean getAllActive() {
-        return allActive_;
+      public float getAvailability() {
+        return availability_;
       }
       /**
-       * <code>bool all_active = 2;</code>
-       * @param value The allActive to set.
+       * <pre>
+       * 0.0 .. 100.0 percentage of availability
+       * </pre>
+       *
+       * <code>float availability = 3;</code>
+       * @param value The availability to set.
        * @return This builder for chaining.
        */
-      public Builder setAllActive(boolean value) {
+      public Builder setAvailability(float value) {
         
-        allActive_ = value;
+        availability_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>bool all_active = 2;</code>
+       * <pre>
+       * 0.0 .. 100.0 percentage of availability
+       * </pre>
+       *
+       * <code>float availability = 3;</code>
        * @return This builder for chaining.
        */
-      public Builder clearAllActive() {
+      public Builder clearAvailability() {
         
-        allActive_ = false;
+        availability_ = 0F;
         onChanged();
         return this;
       }
@@ -57195,100 +68325,151 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Constraint_SLA_Availability)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_SLA_Isolation_level)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Constraint_SLA_Availability)
-    private static final context.ContextOuterClass.Constraint_SLA_Availability DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint_SLA_Isolation_level)
+    private static final context.ContextOuterClass.Constraint_SLA_Isolation_level DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_SLA_Availability();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_SLA_Isolation_level();
     }
 
-    public static context.ContextOuterClass.Constraint_SLA_Availability getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Constraint_SLA_Availability>
-        PARSER = new com.google.protobuf.AbstractParser<Constraint_SLA_Availability>() {
+    private static final com.google.protobuf.Parser<Constraint_SLA_Isolation_level>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_SLA_Isolation_level>() {
       @java.lang.Override
-      public Constraint_SLA_Availability parsePartialFrom(
+      public Constraint_SLA_Isolation_level parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Constraint_SLA_Availability(input, extensionRegistry);
+        return new Constraint_SLA_Isolation_level(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Constraint_SLA_Availability> parser() {
+    public static com.google.protobuf.Parser<Constraint_SLA_Isolation_level> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Constraint_SLA_Availability> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_SLA_Isolation_level> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Constraint_SLA_Availability getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_SLA_Isolation_level getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface Constraint_SLA_Isolation_levelOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Constraint_SLA_Isolation_level)
+  public interface Constraint_ExclusionsOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_Exclusions)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
-     * @return A list containing the isolationLevel.
+     * <code>bool is_permanent = 1;</code>
+     * @return The isPermanent.
      */
-    java.util.List<context.ContextOuterClass.IsolationLevelEnum> getIsolationLevelList();
+    boolean getIsPermanent();
+
     /**
-     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
-     * @return The count of isolationLevel.
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
      */
-    int getIsolationLevelCount();
+    java.util.List<context.ContextOuterClass.DeviceId> 
+        getDeviceIdsList();
     /**
-     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
-     * @param index The index of the element to return.
-     * @return The isolationLevel at the given index.
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
      */
-    context.ContextOuterClass.IsolationLevelEnum getIsolationLevel(int index);
+    context.ContextOuterClass.DeviceId getDeviceIds(int index);
     /**
-     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
-     * @return A list containing the enum numeric values on the wire for isolationLevel.
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
      */
-    java.util.List<java.lang.Integer>
-    getIsolationLevelValueList();
+    int getDeviceIdsCount();
     /**
-     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
-     * @param index The index of the value to return.
-     * @return The enum numeric value on the wire of isolationLevel at the given index.
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
      */
-    int getIsolationLevelValue(int index);
+    java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+        getDeviceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+     */
+    java.util.List<context.ContextOuterClass.EndPointId> 
+        getEndpointIdsList();
+    /**
+     * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+     */
+    context.ContextOuterClass.EndPointId getEndpointIds(int index);
+    /**
+     * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+     */
+    int getEndpointIdsCount();
+    /**
+     * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getEndpointIdsOrBuilderList();
+    /**
+     * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.LinkId link_ids = 4;</code>
+     */
+    java.util.List<context.ContextOuterClass.LinkId> 
+        getLinkIdsList();
+    /**
+     * <code>repeated .context.LinkId link_ids = 4;</code>
+     */
+    context.ContextOuterClass.LinkId getLinkIds(int index);
+    /**
+     * <code>repeated .context.LinkId link_ids = 4;</code>
+     */
+    int getLinkIdsCount();
+    /**
+     * <code>repeated .context.LinkId link_ids = 4;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+        getLinkIdsOrBuilderList();
+    /**
+     * <code>repeated .context.LinkId link_ids = 4;</code>
+     */
+    context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
+        int index);
   }
   /**
-   * Protobuf type {@code context.Constraint_SLA_Isolation_level}
+   * Protobuf type {@code context.Constraint_Exclusions}
    */
-  public static final class Constraint_SLA_Isolation_level extends
+  public static final class Constraint_Exclusions extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Constraint_SLA_Isolation_level)
-      Constraint_SLA_Isolation_levelOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Constraint_Exclusions)
+      Constraint_ExclusionsOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Constraint_SLA_Isolation_level.newBuilder() to construct.
-    private Constraint_SLA_Isolation_level(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint_Exclusions.newBuilder() to construct.
+    private Constraint_Exclusions(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Constraint_SLA_Isolation_level() {
-      isolationLevel_ = java.util.Collections.emptyList();
+    private Constraint_Exclusions() {
+      deviceIds_ = java.util.Collections.emptyList();
+      endpointIds_ = java.util.Collections.emptyList();
+      linkIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Constraint_SLA_Isolation_level();
+      return new Constraint_Exclusions();
     }
 
     @java.lang.Override
@@ -57296,7 +68477,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Constraint_SLA_Isolation_level(
+    private Constraint_Exclusions(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -57316,26 +68497,35 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 8: {
-              int rawValue = input.readEnum();
+
+              isPermanent_ = input.readBool();
+              break;
+            }
+            case 18: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                isolationLevel_ = new java.util.ArrayList<java.lang.Integer>();
+                deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              isolationLevel_.add(rawValue);
+              deviceIds_.add(
+                  input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry));
               break;
             }
-            case 10: {
-              int length = input.readRawVarint32();
-              int oldLimit = input.pushLimit(length);
-              while(input.getBytesUntilLimit() > 0) {
-                int rawValue = input.readEnum();
-                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                  isolationLevel_ = new java.util.ArrayList<java.lang.Integer>();
-                  mutable_bitField0_ |= 0x00000001;
-                }
-                isolationLevel_.add(rawValue);
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                endpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
+                mutable_bitField0_ |= 0x00000002;
               }
-              input.popLimit(oldLimit);
+              endpointIds_.add(
+                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
+              break;
+            }
+            case 34: {
+              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
+                linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              linkIds_.add(
+                  input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -57354,7 +68544,13 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          isolationLevel_ = java.util.Collections.unmodifiableList(isolationLevel_);
+          deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          endpointIds_ = java.util.Collections.unmodifiableList(endpointIds_);
+        }
+        if (((mutable_bitField0_ & 0x00000004) != 0)) {
+          linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -57362,74 +68558,147 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Isolation_level_descriptor;
+      return context.ContextOuterClass.internal_static_context_Constraint_Exclusions_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Isolation_level_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Constraint_Exclusions_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Constraint_SLA_Isolation_level.class, context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder.class);
+              context.ContextOuterClass.Constraint_Exclusions.class, context.ContextOuterClass.Constraint_Exclusions.Builder.class);
     }
 
-    public static final int ISOLATION_LEVEL_FIELD_NUMBER = 1;
-    private java.util.List<java.lang.Integer> isolationLevel_;
-    private static final com.google.protobuf.Internal.ListAdapter.Converter<
-        java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum> isolationLevel_converter_ =
-            new com.google.protobuf.Internal.ListAdapter.Converter<
-                java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum>() {
-              public context.ContextOuterClass.IsolationLevelEnum convert(java.lang.Integer from) {
-                @SuppressWarnings("deprecation")
-                context.ContextOuterClass.IsolationLevelEnum result = context.ContextOuterClass.IsolationLevelEnum.valueOf(from);
-                return result == null ? context.ContextOuterClass.IsolationLevelEnum.UNRECOGNIZED : result;
-              }
-            };
+    public static final int IS_PERMANENT_FIELD_NUMBER = 1;
+    private boolean isPermanent_;
     /**
-     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
-     * @return A list containing the isolationLevel.
+     * <code>bool is_permanent = 1;</code>
+     * @return The isPermanent.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.IsolationLevelEnum> getIsolationLevelList() {
-      return new com.google.protobuf.Internal.ListAdapter<
-          java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum>(isolationLevel_, isolationLevel_converter_);
+    public boolean getIsPermanent() {
+      return isPermanent_;
     }
+
+    public static final int DEVICE_IDS_FIELD_NUMBER = 2;
+    private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_;
     /**
-     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
-     * @return The count of isolationLevel.
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
      */
     @java.lang.Override
-    public int getIsolationLevelCount() {
-      return isolationLevel_.size();
+    public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
+      return deviceIds_;
     }
     /**
-     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
-     * @param index The index of the element to return.
-     * @return The isolationLevel at the given index.
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.IsolationLevelEnum getIsolationLevel(int index) {
-      return isolationLevel_converter_.convert(isolationLevel_.get(index));
+    public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+        getDeviceIdsOrBuilderList() {
+      return deviceIds_;
     }
     /**
-     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
-     * @return A list containing the enum numeric values on the wire for isolationLevel.
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
      */
     @java.lang.Override
-    public java.util.List<java.lang.Integer>
-    getIsolationLevelValueList() {
-      return isolationLevel_;
+    public int getDeviceIdsCount() {
+      return deviceIds_.size();
     }
     /**
-     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
-     * @param index The index of the value to return.
-     * @return The enum numeric value on the wire of isolationLevel at the given index.
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
      */
     @java.lang.Override
-    public int getIsolationLevelValue(int index) {
-      return isolationLevel_.get(index);
+    public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
+      return deviceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+        int index) {
+      return deviceIds_.get(index);
+    }
+
+    public static final int ENDPOINT_IDS_FIELD_NUMBER = 3;
+    private java.util.List<context.ContextOuterClass.EndPointId> endpointIds_;
+    /**
+     * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.EndPointId> getEndpointIdsList() {
+      return endpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getEndpointIdsOrBuilderList() {
+      return endpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public int getEndpointIdsCount() {
+      return endpointIds_.size();
+    }
+    /**
+     * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getEndpointIds(int index) {
+      return endpointIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdsOrBuilder(
+        int index) {
+      return endpointIds_.get(index);
+    }
+
+    public static final int LINK_IDS_FIELD_NUMBER = 4;
+    private java.util.List<context.ContextOuterClass.LinkId> linkIds_;
+    /**
+     * <code>repeated .context.LinkId link_ids = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
+      return linkIds_;
+    }
+    /**
+     * <code>repeated .context.LinkId link_ids = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+        getLinkIdsOrBuilderList() {
+      return linkIds_;
+    }
+    /**
+     * <code>repeated .context.LinkId link_ids = 4;</code>
+     */
+    @java.lang.Override
+    public int getLinkIdsCount() {
+      return linkIds_.size();
+    }
+    /**
+     * <code>repeated .context.LinkId link_ids = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkId getLinkIds(int index) {
+      return linkIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.LinkId link_ids = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
+        int index) {
+      return linkIds_.get(index);
     }
-    private int isolationLevelMemoizedSerializedSize;
 
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
@@ -57445,13 +68714,17 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      getSerializedSize();
-      if (getIsolationLevelList().size() > 0) {
-        output.writeUInt32NoTag(10);
-        output.writeUInt32NoTag(isolationLevelMemoizedSerializedSize);
+      if (isPermanent_ != false) {
+        output.writeBool(1, isPermanent_);
       }
-      for (int i = 0; i < isolationLevel_.size(); i++) {
-        output.writeEnumNoTag(isolationLevel_.get(i));
+      for (int i = 0; i < deviceIds_.size(); i++) {
+        output.writeMessage(2, deviceIds_.get(i));
+      }
+      for (int i = 0; i < endpointIds_.size(); i++) {
+        output.writeMessage(3, endpointIds_.get(i));
+      }
+      for (int i = 0; i < linkIds_.size(); i++) {
+        output.writeMessage(4, linkIds_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -57462,17 +68735,21 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      {
-        int dataSize = 0;
-        for (int i = 0; i < isolationLevel_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeEnumSizeNoTag(isolationLevel_.get(i));
-        }
-        size += dataSize;
-        if (!getIsolationLevelList().isEmpty()) {  size += 1;
-          size += com.google.protobuf.CodedOutputStream
-            .computeUInt32SizeNoTag(dataSize);
-        }isolationLevelMemoizedSerializedSize = dataSize;
+      if (isPermanent_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(1, isPermanent_);
+      }
+      for (int i = 0; i < deviceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, deviceIds_.get(i));
+      }
+      for (int i = 0; i < endpointIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, endpointIds_.get(i));
+      }
+      for (int i = 0; i < linkIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, linkIds_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -57484,12 +68761,19 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Constraint_SLA_Isolation_level)) {
+      if (!(obj instanceof context.ContextOuterClass.Constraint_Exclusions)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Constraint_SLA_Isolation_level other = (context.ContextOuterClass.Constraint_SLA_Isolation_level) obj;
+      context.ContextOuterClass.Constraint_Exclusions other = (context.ContextOuterClass.Constraint_Exclusions) obj;
 
-      if (!isolationLevel_.equals(other.isolationLevel_)) return false;
+      if (getIsPermanent()
+          != other.getIsPermanent()) return false;
+      if (!getDeviceIdsList()
+          .equals(other.getDeviceIdsList())) return false;
+      if (!getEndpointIdsList()
+          .equals(other.getEndpointIdsList())) return false;
+      if (!getLinkIdsList()
+          .equals(other.getLinkIdsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -57501,78 +68785,89 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getIsolationLevelCount() > 0) {
-        hash = (37 * hash) + ISOLATION_LEVEL_FIELD_NUMBER;
-        hash = (53 * hash) + isolationLevel_.hashCode();
+      hash = (37 * hash) + IS_PERMANENT_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getIsPermanent());
+      if (getDeviceIdsCount() > 0) {
+        hash = (37 * hash) + DEVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceIdsList().hashCode();
+      }
+      if (getEndpointIdsCount() > 0) {
+        hash = (37 * hash) + ENDPOINT_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointIdsList().hashCode();
+      }
+      if (getLinkIdsCount() > 0) {
+        hash = (37 * hash) + LINK_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getLinkIdsList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(
+    public static context.ContextOuterClass.Constraint_Exclusions parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(
+    public static context.ContextOuterClass.Constraint_Exclusions parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(
+    public static context.ContextOuterClass.Constraint_Exclusions parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(
+    public static context.ContextOuterClass.Constraint_Exclusions parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(byte[] data)
+    public static context.ContextOuterClass.Constraint_Exclusions parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(
+    public static context.ContextOuterClass.Constraint_Exclusions parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_Exclusions parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(
+    public static context.ContextOuterClass.Constraint_Exclusions parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_Exclusions parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseDelimitedFrom(
+    public static context.ContextOuterClass.Constraint_Exclusions parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(
+    public static context.ContextOuterClass.Constraint_Exclusions parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(
+    public static context.ContextOuterClass.Constraint_Exclusions parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -57585,7 +68880,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Constraint_SLA_Isolation_level prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_Exclusions prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -57601,303 +68896,1029 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Constraint_SLA_Isolation_level}
+     * Protobuf type {@code context.Constraint_Exclusions}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Constraint_SLA_Isolation_level)
-        context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Constraint_Exclusions)
+        context.ContextOuterClass.Constraint_ExclusionsOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Isolation_level_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_Exclusions_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Constraint_Exclusions_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Constraint_Exclusions.class, context.ContextOuterClass.Constraint_Exclusions.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Constraint_Exclusions.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getDeviceIdsFieldBuilder();
+          getEndpointIdsFieldBuilder();
+          getLinkIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        isPermanent_ = false;
+
+        if (deviceIdsBuilder_ == null) {
+          deviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          deviceIdsBuilder_.clear();
+        }
+        if (endpointIdsBuilder_ == null) {
+          endpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          endpointIdsBuilder_.clear();
+        }
+        if (linkIdsBuilder_ == null) {
+          linkIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
+        } else {
+          linkIdsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Constraint_Exclusions_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_Exclusions getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_Exclusions.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_Exclusions build() {
+        context.ContextOuterClass.Constraint_Exclusions result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_Exclusions buildPartial() {
+        context.ContextOuterClass.Constraint_Exclusions result = new context.ContextOuterClass.Constraint_Exclusions(this);
+        int from_bitField0_ = bitField0_;
+        result.isPermanent_ = isPermanent_;
+        if (deviceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.deviceIds_ = deviceIds_;
+        } else {
+          result.deviceIds_ = deviceIdsBuilder_.build();
+        }
+        if (endpointIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            endpointIds_ = java.util.Collections.unmodifiableList(endpointIds_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.endpointIds_ = endpointIds_;
+        } else {
+          result.endpointIds_ = endpointIdsBuilder_.build();
+        }
+        if (linkIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000004) != 0)) {
+            linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
+            bitField0_ = (bitField0_ & ~0x00000004);
+          }
+          result.linkIds_ = linkIds_;
+        } else {
+          result.linkIds_ = linkIdsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Constraint_Exclusions) {
+          return mergeFrom((context.ContextOuterClass.Constraint_Exclusions)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_Exclusions other) {
+        if (other == context.ContextOuterClass.Constraint_Exclusions.getDefaultInstance()) return this;
+        if (other.getIsPermanent() != false) {
+          setIsPermanent(other.getIsPermanent());
+        }
+        if (deviceIdsBuilder_ == null) {
+          if (!other.deviceIds_.isEmpty()) {
+            if (deviceIds_.isEmpty()) {
+              deviceIds_ = other.deviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureDeviceIdsIsMutable();
+              deviceIds_.addAll(other.deviceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.deviceIds_.isEmpty()) {
+            if (deviceIdsBuilder_.isEmpty()) {
+              deviceIdsBuilder_.dispose();
+              deviceIdsBuilder_ = null;
+              deviceIds_ = other.deviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              deviceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getDeviceIdsFieldBuilder() : null;
+            } else {
+              deviceIdsBuilder_.addAllMessages(other.deviceIds_);
+            }
+          }
+        }
+        if (endpointIdsBuilder_ == null) {
+          if (!other.endpointIds_.isEmpty()) {
+            if (endpointIds_.isEmpty()) {
+              endpointIds_ = other.endpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureEndpointIdsIsMutable();
+              endpointIds_.addAll(other.endpointIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.endpointIds_.isEmpty()) {
+            if (endpointIdsBuilder_.isEmpty()) {
+              endpointIdsBuilder_.dispose();
+              endpointIdsBuilder_ = null;
+              endpointIds_ = other.endpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              endpointIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getEndpointIdsFieldBuilder() : null;
+            } else {
+              endpointIdsBuilder_.addAllMessages(other.endpointIds_);
+            }
+          }
+        }
+        if (linkIdsBuilder_ == null) {
+          if (!other.linkIds_.isEmpty()) {
+            if (linkIds_.isEmpty()) {
+              linkIds_ = other.linkIds_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+            } else {
+              ensureLinkIdsIsMutable();
+              linkIds_.addAll(other.linkIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.linkIds_.isEmpty()) {
+            if (linkIdsBuilder_.isEmpty()) {
+              linkIdsBuilder_.dispose();
+              linkIdsBuilder_ = null;
+              linkIds_ = other.linkIds_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+              linkIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getLinkIdsFieldBuilder() : null;
+            } else {
+              linkIdsBuilder_.addAllMessages(other.linkIds_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Constraint_Exclusions parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Constraint_Exclusions) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private boolean isPermanent_ ;
+      /**
+       * <code>bool is_permanent = 1;</code>
+       * @return The isPermanent.
+       */
+      @java.lang.Override
+      public boolean getIsPermanent() {
+        return isPermanent_;
+      }
+      /**
+       * <code>bool is_permanent = 1;</code>
+       * @param value The isPermanent to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIsPermanent(boolean value) {
+        
+        isPermanent_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>bool is_permanent = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIsPermanent() {
+        
+        isPermanent_ = false;
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureDeviceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>(deviceIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdsBuilder_;
+
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
+        if (deviceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(deviceIds_);
+        } else {
+          return deviceIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public int getDeviceIdsCount() {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_.size();
+        } else {
+          return deviceIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_.get(index);
+        } else {
+          return deviceIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder setDeviceIds(
+          int index, context.ContextOuterClass.DeviceId value) {
+        if (deviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceIdsIsMutable();
+          deviceIds_.set(index, value);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder setDeviceIds(
+          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          deviceIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder addDeviceIds(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(value);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder addDeviceIds(
+          int index, context.ContextOuterClass.DeviceId value) {
+        if (deviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(index, value);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder addDeviceIds(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder addDeviceIds(
+          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder addAllDeviceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.DeviceId> values) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, deviceIds_);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder clearDeviceIds() {
+        if (deviceIdsBuilder_ == null) {
+          deviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder removeDeviceIds(int index) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.remove(index);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdsBuilder(
+          int index) {
+        return getDeviceIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+          int index) {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_.get(index);  } else {
+          return deviceIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+           getDeviceIdsOrBuilderList() {
+        if (deviceIdsBuilder_ != null) {
+          return deviceIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(deviceIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder() {
+        return getDeviceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.DeviceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder(
+          int index) {
+        return getDeviceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.DeviceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public java.util.List<context.ContextOuterClass.DeviceId.Builder> 
+           getDeviceIdsBuilderList() {
+        return getDeviceIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdsFieldBuilder() {
+        if (deviceIdsBuilder_ == null) {
+          deviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  deviceIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          deviceIds_ = null;
+        }
+        return deviceIdsBuilder_;
       }
 
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Isolation_level_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Constraint_SLA_Isolation_level.class, context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder.class);
+      private java.util.List<context.ContextOuterClass.EndPointId> endpointIds_ =
+        java.util.Collections.emptyList();
+      private void ensureEndpointIdsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          endpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(endpointIds_);
+          bitField0_ |= 0x00000002;
+         }
       }
 
-      // Construct using context.ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdsBuilder_;
 
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
+      /**
+       * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId> getEndpointIdsList() {
+        if (endpointIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(endpointIds_);
+        } else {
+          return endpointIdsBuilder_.getMessageList();
+        }
       }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
+      /**
+       * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+       */
+      public int getEndpointIdsCount() {
+        if (endpointIdsBuilder_ == null) {
+          return endpointIds_.size();
+        } else {
+          return endpointIdsBuilder_.getCount();
         }
       }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        isolationLevel_ = java.util.Collections.emptyList();
-        bitField0_ = (bitField0_ & ~0x00000001);
+      /**
+       * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId getEndpointIds(int index) {
+        if (endpointIdsBuilder_ == null) {
+          return endpointIds_.get(index);
+        } else {
+          return endpointIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+       */
+      public Builder setEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (endpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureEndpointIdsIsMutable();
+          endpointIds_.set(index, value);
+          onChanged();
+        } else {
+          endpointIdsBuilder_.setMessage(index, value);
+        }
         return this;
       }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Isolation_level_descriptor;
+      /**
+       * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+       */
+      public Builder setEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdsBuilder_ == null) {
+          ensureEndpointIdsIsMutable();
+          endpointIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          endpointIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.Constraint_SLA_Isolation_level getDefaultInstanceForType() {
-        return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
+      /**
+       * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+       */
+      public Builder addEndpointIds(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureEndpointIdsIsMutable();
+          endpointIds_.add(value);
+          onChanged();
+        } else {
+          endpointIdsBuilder_.addMessage(value);
+        }
+        return this;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.Constraint_SLA_Isolation_level build() {
-        context.ContextOuterClass.Constraint_SLA_Isolation_level result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
+      /**
+       * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+       */
+      public Builder addEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (endpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureEndpointIdsIsMutable();
+          endpointIds_.add(index, value);
+          onChanged();
+        } else {
+          endpointIdsBuilder_.addMessage(index, value);
         }
-        return result;
+        return this;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.Constraint_SLA_Isolation_level buildPartial() {
-        context.ContextOuterClass.Constraint_SLA_Isolation_level result = new context.ContextOuterClass.Constraint_SLA_Isolation_level(this);
-        int from_bitField0_ = bitField0_;
-        if (((bitField0_ & 0x00000001) != 0)) {
-          isolationLevel_ = java.util.Collections.unmodifiableList(isolationLevel_);
-          bitField0_ = (bitField0_ & ~0x00000001);
+      /**
+       * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+       */
+      public Builder addEndpointIds(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdsBuilder_ == null) {
+          ensureEndpointIdsIsMutable();
+          endpointIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          endpointIdsBuilder_.addMessage(builderForValue.build());
         }
-        result.isolationLevel_ = isolationLevel_;
-        onBuilt();
-        return result;
+        return this;
       }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
+      /**
+       * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+       */
+      public Builder addEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdsBuilder_ == null) {
+          ensureEndpointIdsIsMutable();
+          endpointIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          endpointIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
+      /**
+       * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+       */
+      public Builder addAllEndpointIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
+        if (endpointIdsBuilder_ == null) {
+          ensureEndpointIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, endpointIds_);
+          onChanged();
+        } else {
+          endpointIdsBuilder_.addAllMessages(values);
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
+      /**
+       * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+       */
+      public Builder clearEndpointIds() {
+        if (endpointIdsBuilder_ == null) {
+          endpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          endpointIdsBuilder_.clear();
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
+      /**
+       * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+       */
+      public Builder removeEndpointIds(int index) {
+        if (endpointIdsBuilder_ == null) {
+          ensureEndpointIdsIsMutable();
+          endpointIds_.remove(index);
+          onChanged();
+        } else {
+          endpointIdsBuilder_.remove(index);
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
+      /**
+       * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdsBuilder(
+          int index) {
+        return getEndpointIdsFieldBuilder().getBuilder(index);
       }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+      /**
+       * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdsOrBuilder(
+          int index) {
+        if (endpointIdsBuilder_ == null) {
+          return endpointIds_.get(index);  } else {
+          return endpointIdsBuilder_.getMessageOrBuilder(index);
+        }
       }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Constraint_SLA_Isolation_level) {
-          return mergeFrom((context.ContextOuterClass.Constraint_SLA_Isolation_level)other);
+      /**
+       * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+           getEndpointIdsOrBuilderList() {
+        if (endpointIdsBuilder_ != null) {
+          return endpointIdsBuilder_.getMessageOrBuilderList();
         } else {
-          super.mergeFrom(other);
-          return this;
+          return java.util.Collections.unmodifiableList(endpointIds_);
         }
       }
-
-      public Builder mergeFrom(context.ContextOuterClass.Constraint_SLA_Isolation_level other) {
-        if (other == context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance()) return this;
-        if (!other.isolationLevel_.isEmpty()) {
-          if (isolationLevel_.isEmpty()) {
-            isolationLevel_ = other.isolationLevel_;
-            bitField0_ = (bitField0_ & ~0x00000001);
-          } else {
-            ensureIsolationLevelIsMutable();
-            isolationLevel_.addAll(other.isolationLevel_);
-          }
-          onChanged();
+      /**
+       * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addEndpointIdsBuilder() {
+        return getEndpointIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addEndpointIdsBuilder(
+          int index) {
+        return getEndpointIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId endpoint_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
+           getEndpointIdsBuilderList() {
+        return getEndpointIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdsFieldBuilder() {
+        if (endpointIdsBuilder_ == null) {
+          endpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  endpointIds_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          endpointIds_ = null;
         }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
+        return endpointIdsBuilder_;
       }
 
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      private java.util.List<context.ContextOuterClass.LinkId> linkIds_ =
+        java.util.Collections.emptyList();
+      private void ensureLinkIdsIsMutable() {
+        if (!((bitField0_ & 0x00000004) != 0)) {
+          linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>(linkIds_);
+          bitField0_ |= 0x00000004;
+         }
       }
 
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.Constraint_SLA_Isolation_level parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Constraint_SLA_Isolation_level) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdsBuilder_;
+
+      /**
+       * <code>repeated .context.LinkId link_ids = 4;</code>
+       */
+      public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
+        if (linkIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(linkIds_);
+        } else {
+          return linkIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 4;</code>
+       */
+      public int getLinkIdsCount() {
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.size();
+        } else {
+          return linkIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 4;</code>
+       */
+      public context.ContextOuterClass.LinkId getLinkIds(int index) {
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.get(index);
+        } else {
+          return linkIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 4;</code>
+       */
+      public Builder setLinkIds(
+          int index, context.ContextOuterClass.LinkId value) {
+        if (linkIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureLinkIdsIsMutable();
+          linkIds_.set(index, value);
+          onChanged();
+        } else {
+          linkIdsBuilder_.setMessage(index, value);
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<java.lang.Integer> isolationLevel_ =
-        java.util.Collections.emptyList();
-      private void ensureIsolationLevelIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          isolationLevel_ = new java.util.ArrayList<java.lang.Integer>(isolationLevel_);
-          bitField0_ |= 0x00000001;
+      /**
+       * <code>repeated .context.LinkId link_ids = 4;</code>
+       */
+      public Builder setLinkIds(
+          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          linkIdsBuilder_.setMessage(index, builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
-       * @return A list containing the isolationLevel.
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
-      public java.util.List<context.ContextOuterClass.IsolationLevelEnum> getIsolationLevelList() {
-        return new com.google.protobuf.Internal.ListAdapter<
-            java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum>(isolationLevel_, isolationLevel_converter_);
+      public Builder addLinkIds(context.ContextOuterClass.LinkId value) {
+        if (linkIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinkIdsIsMutable();
+          linkIds_.add(value);
+          onChanged();
+        } else {
+          linkIdsBuilder_.addMessage(value);
+        }
+        return this;
       }
       /**
-       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
-       * @return The count of isolationLevel.
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
-      public int getIsolationLevelCount() {
-        return isolationLevel_.size();
+      public Builder addLinkIds(
+          int index, context.ContextOuterClass.LinkId value) {
+        if (linkIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinkIdsIsMutable();
+          linkIds_.add(index, value);
+          onChanged();
+        } else {
+          linkIdsBuilder_.addMessage(index, value);
+        }
+        return this;
       }
       /**
-       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
-       * @param index The index of the element to return.
-       * @return The isolationLevel at the given index.
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
-      public context.ContextOuterClass.IsolationLevelEnum getIsolationLevel(int index) {
-        return isolationLevel_converter_.convert(isolationLevel_.get(index));
+      public Builder addLinkIds(
+          context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          linkIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
       }
       /**
-       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
-       * @param index The index to set the value at.
-       * @param value The isolationLevel to set.
-       * @return This builder for chaining.
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
-      public Builder setIsolationLevel(
-          int index, context.ContextOuterClass.IsolationLevelEnum value) {
-        if (value == null) {
-          throw new NullPointerException();
+      public Builder addLinkIds(
+          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          linkIdsBuilder_.addMessage(index, builderForValue.build());
         }
-        ensureIsolationLevelIsMutable();
-        isolationLevel_.set(index, value.getNumber());
-        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
-       * @param value The isolationLevel to add.
-       * @return This builder for chaining.
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
-      public Builder addIsolationLevel(context.ContextOuterClass.IsolationLevelEnum value) {
-        if (value == null) {
-          throw new NullPointerException();
+      public Builder addAllLinkIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.LinkId> values) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, linkIds_);
+          onChanged();
+        } else {
+          linkIdsBuilder_.addAllMessages(values);
         }
-        ensureIsolationLevelIsMutable();
-        isolationLevel_.add(value.getNumber());
-        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
-       * @param values The isolationLevel to add.
-       * @return This builder for chaining.
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
-      public Builder addAllIsolationLevel(
-          java.lang.Iterable<? extends context.ContextOuterClass.IsolationLevelEnum> values) {
-        ensureIsolationLevelIsMutable();
-        for (context.ContextOuterClass.IsolationLevelEnum value : values) {
-          isolationLevel_.add(value.getNumber());
+      public Builder clearLinkIds() {
+        if (linkIdsBuilder_ == null) {
+          linkIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
+          onChanged();
+        } else {
+          linkIdsBuilder_.clear();
         }
-        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
-       * @return This builder for chaining.
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
-      public Builder clearIsolationLevel() {
-        isolationLevel_ = java.util.Collections.emptyList();
-        bitField0_ = (bitField0_ & ~0x00000001);
-        onChanged();
+      public Builder removeLinkIds(int index) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.remove(index);
+          onChanged();
+        } else {
+          linkIdsBuilder_.remove(index);
+        }
         return this;
       }
       /**
-       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
-       * @return A list containing the enum numeric values on the wire for isolationLevel.
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
-      public java.util.List<java.lang.Integer>
-      getIsolationLevelValueList() {
-        return java.util.Collections.unmodifiableList(isolationLevel_);
+      public context.ContextOuterClass.LinkId.Builder getLinkIdsBuilder(
+          int index) {
+        return getLinkIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
-       * @param index The index of the value to return.
-       * @return The enum numeric value on the wire of isolationLevel at the given index.
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
-      public int getIsolationLevelValue(int index) {
-        return isolationLevel_.get(index);
+      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
+          int index) {
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.get(index);  } else {
+          return linkIdsBuilder_.getMessageOrBuilder(index);
+        }
       }
       /**
-       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
-       * @param index The index of the value to return.
-       * @return The enum numeric value on the wire of isolationLevel at the given index.
-       * @return This builder for chaining.
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
-      public Builder setIsolationLevelValue(
-          int index, int value) {
-        ensureIsolationLevelIsMutable();
-        isolationLevel_.set(index, value);
-        onChanged();
-        return this;
+      public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+           getLinkIdsOrBuilderList() {
+        if (linkIdsBuilder_ != null) {
+          return linkIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(linkIds_);
+        }
       }
       /**
-       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
-       * @param value The enum numeric value on the wire for isolationLevel to add.
-       * @return This builder for chaining.
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
-      public Builder addIsolationLevelValue(int value) {
-        ensureIsolationLevelIsMutable();
-        isolationLevel_.add(value);
-        onChanged();
-        return this;
+      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder() {
+        return getLinkIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.LinkId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
-       * @param values The enum numeric values on the wire for isolationLevel to add.
-       * @return This builder for chaining.
+       * <code>repeated .context.LinkId link_ids = 4;</code>
        */
-      public Builder addAllIsolationLevelValue(
-          java.lang.Iterable<java.lang.Integer> values) {
-        ensureIsolationLevelIsMutable();
-        for (int value : values) {
-          isolationLevel_.add(value);
+      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder(
+          int index) {
+        return getLinkIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.LinkId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 4;</code>
+       */
+      public java.util.List<context.ContextOuterClass.LinkId.Builder> 
+           getLinkIdsBuilderList() {
+        return getLinkIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
+          getLinkIdsFieldBuilder() {
+        if (linkIdsBuilder_ == null) {
+          linkIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
+                  linkIds_,
+                  ((bitField0_ & 0x00000004) != 0),
+                  getParentForChildren(),
+                  isClean());
+          linkIds_ = null;
         }
-        onChanged();
-        return this;
+        return linkIdsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -57912,41 +69933,41 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Constraint_SLA_Isolation_level)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_Exclusions)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Constraint_SLA_Isolation_level)
-    private static final context.ContextOuterClass.Constraint_SLA_Isolation_level DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint_Exclusions)
+    private static final context.ContextOuterClass.Constraint_Exclusions DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_SLA_Isolation_level();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_Exclusions();
     }
 
-    public static context.ContextOuterClass.Constraint_SLA_Isolation_level getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_Exclusions getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Constraint_SLA_Isolation_level>
-        PARSER = new com.google.protobuf.AbstractParser<Constraint_SLA_Isolation_level>() {
+    private static final com.google.protobuf.Parser<Constraint_Exclusions>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_Exclusions>() {
       @java.lang.Override
-      public Constraint_SLA_Isolation_level parsePartialFrom(
+      public Constraint_Exclusions parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Constraint_SLA_Isolation_level(input, extensionRegistry);
+        return new Constraint_Exclusions(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Constraint_SLA_Isolation_level> parser() {
+    public static com.google.protobuf.Parser<Constraint_Exclusions> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Constraint_SLA_Isolation_level> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_Exclusions> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Constraint_SLA_Isolation_level getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_Exclusions getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
@@ -58076,6 +70097,21 @@ public final class ContextOuterClass {
      */
     context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder getSlaIsolationOrBuilder();
 
+    /**
+     * <code>.context.Constraint_Exclusions exclusions = 9;</code>
+     * @return Whether the exclusions field is set.
+     */
+    boolean hasExclusions();
+    /**
+     * <code>.context.Constraint_Exclusions exclusions = 9;</code>
+     * @return The exclusions.
+     */
+    context.ContextOuterClass.Constraint_Exclusions getExclusions();
+    /**
+     * <code>.context.Constraint_Exclusions exclusions = 9;</code>
+     */
+    context.ContextOuterClass.Constraint_ExclusionsOrBuilder getExclusionsOrBuilder();
+
     public context.ContextOuterClass.Constraint.ConstraintCase getConstraintCase();
   }
   /**
@@ -58235,6 +70271,20 @@ public final class ContextOuterClass {
               constraintCase_ = 8;
               break;
             }
+            case 74: {
+              context.ContextOuterClass.Constraint_Exclusions.Builder subBuilder = null;
+              if (constraintCase_ == 9) {
+                subBuilder = ((context.ContextOuterClass.Constraint_Exclusions) constraint_).toBuilder();
+              }
+              constraint_ =
+                  input.readMessage(context.ContextOuterClass.Constraint_Exclusions.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((context.ContextOuterClass.Constraint_Exclusions) constraint_);
+                constraint_ = subBuilder.buildPartial();
+              }
+              constraintCase_ = 9;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -58280,6 +70330,7 @@ public final class ContextOuterClass {
       SLA_LATENCY(6),
       SLA_AVAILABILITY(7),
       SLA_ISOLATION(8),
+      EXCLUSIONS(9),
       CONSTRAINT_NOT_SET(0);
       private final int value;
       private ConstraintCase(int value) {
@@ -58305,6 +70356,7 @@ public final class ContextOuterClass {
           case 6: return SLA_LATENCY;
           case 7: return SLA_AVAILABILITY;
           case 8: return SLA_ISOLATION;
+          case 9: return EXCLUSIONS;
           case 0: return CONSTRAINT_NOT_SET;
           default: return null;
         }
@@ -58568,6 +70620,37 @@ public final class ContextOuterClass {
       return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
     }
 
+    public static final int EXCLUSIONS_FIELD_NUMBER = 9;
+    /**
+     * <code>.context.Constraint_Exclusions exclusions = 9;</code>
+     * @return Whether the exclusions field is set.
+     */
+    @java.lang.Override
+    public boolean hasExclusions() {
+      return constraintCase_ == 9;
+    }
+    /**
+     * <code>.context.Constraint_Exclusions exclusions = 9;</code>
+     * @return The exclusions.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_Exclusions getExclusions() {
+      if (constraintCase_ == 9) {
+         return (context.ContextOuterClass.Constraint_Exclusions) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_Exclusions.getDefaultInstance();
+    }
+    /**
+     * <code>.context.Constraint_Exclusions exclusions = 9;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_ExclusionsOrBuilder getExclusionsOrBuilder() {
+      if (constraintCase_ == 9) {
+         return (context.ContextOuterClass.Constraint_Exclusions) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_Exclusions.getDefaultInstance();
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -58606,6 +70689,9 @@ public final class ContextOuterClass {
       if (constraintCase_ == 8) {
         output.writeMessage(8, (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
       }
+      if (constraintCase_ == 9) {
+        output.writeMessage(9, (context.ContextOuterClass.Constraint_Exclusions) constraint_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -58647,6 +70733,10 @@ public final class ContextOuterClass {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(8, (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
       }
+      if (constraintCase_ == 9) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(9, (context.ContextOuterClass.Constraint_Exclusions) constraint_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -58696,6 +70786,10 @@ public final class ContextOuterClass {
           if (!getSlaIsolation()
               .equals(other.getSlaIsolation())) return false;
           break;
+        case 9:
+          if (!getExclusions()
+              .equals(other.getExclusions())) return false;
+          break;
         case 0:
         default:
       }
@@ -58743,6 +70837,10 @@ public final class ContextOuterClass {
           hash = (37 * hash) + SLA_ISOLATION_FIELD_NUMBER;
           hash = (53 * hash) + getSlaIsolation().hashCode();
           break;
+        case 9:
+          hash = (37 * hash) + EXCLUSIONS_FIELD_NUMBER;
+          hash = (53 * hash) + getExclusions().hashCode();
+          break;
         case 0:
         default:
       }
@@ -58963,6 +71061,13 @@ public final class ContextOuterClass {
             result.constraint_ = slaIsolationBuilder_.build();
           }
         }
+        if (constraintCase_ == 9) {
+          if (exclusionsBuilder_ == null) {
+            result.constraint_ = constraint_;
+          } else {
+            result.constraint_ = exclusionsBuilder_.build();
+          }
+        }
         result.constraintCase_ = constraintCase_;
         onBuilt();
         return result;
@@ -59045,6 +71150,10 @@ public final class ContextOuterClass {
             mergeSlaIsolation(other.getSlaIsolation());
             break;
           }
+          case EXCLUSIONS: {
+            mergeExclusions(other.getExclusions());
+            break;
+          }
           case CONSTRAINT_NOT_SET: {
             break;
           }
@@ -60220,6 +72329,147 @@ public final class ContextOuterClass {
         onChanged();;
         return slaIsolationBuilder_;
       }
+
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_Exclusions, context.ContextOuterClass.Constraint_Exclusions.Builder, context.ContextOuterClass.Constraint_ExclusionsOrBuilder> exclusionsBuilder_;
+      /**
+       * <code>.context.Constraint_Exclusions exclusions = 9;</code>
+       * @return Whether the exclusions field is set.
+       */
+      @java.lang.Override
+      public boolean hasExclusions() {
+        return constraintCase_ == 9;
+      }
+      /**
+       * <code>.context.Constraint_Exclusions exclusions = 9;</code>
+       * @return The exclusions.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_Exclusions getExclusions() {
+        if (exclusionsBuilder_ == null) {
+          if (constraintCase_ == 9) {
+            return (context.ContextOuterClass.Constraint_Exclusions) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_Exclusions.getDefaultInstance();
+        } else {
+          if (constraintCase_ == 9) {
+            return exclusionsBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.Constraint_Exclusions.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_Exclusions exclusions = 9;</code>
+       */
+      public Builder setExclusions(context.ContextOuterClass.Constraint_Exclusions value) {
+        if (exclusionsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          constraint_ = value;
+          onChanged();
+        } else {
+          exclusionsBuilder_.setMessage(value);
+        }
+        constraintCase_ = 9;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_Exclusions exclusions = 9;</code>
+       */
+      public Builder setExclusions(
+          context.ContextOuterClass.Constraint_Exclusions.Builder builderForValue) {
+        if (exclusionsBuilder_ == null) {
+          constraint_ = builderForValue.build();
+          onChanged();
+        } else {
+          exclusionsBuilder_.setMessage(builderForValue.build());
+        }
+        constraintCase_ = 9;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_Exclusions exclusions = 9;</code>
+       */
+      public Builder mergeExclusions(context.ContextOuterClass.Constraint_Exclusions value) {
+        if (exclusionsBuilder_ == null) {
+          if (constraintCase_ == 9 &&
+              constraint_ != context.ContextOuterClass.Constraint_Exclusions.getDefaultInstance()) {
+            constraint_ = context.ContextOuterClass.Constraint_Exclusions.newBuilder((context.ContextOuterClass.Constraint_Exclusions) constraint_)
+                .mergeFrom(value).buildPartial();
+          } else {
+            constraint_ = value;
+          }
+          onChanged();
+        } else {
+          if (constraintCase_ == 9) {
+            exclusionsBuilder_.mergeFrom(value);
+          }
+          exclusionsBuilder_.setMessage(value);
+        }
+        constraintCase_ = 9;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_Exclusions exclusions = 9;</code>
+       */
+      public Builder clearExclusions() {
+        if (exclusionsBuilder_ == null) {
+          if (constraintCase_ == 9) {
+            constraintCase_ = 0;
+            constraint_ = null;
+            onChanged();
+          }
+        } else {
+          if (constraintCase_ == 9) {
+            constraintCase_ = 0;
+            constraint_ = null;
+          }
+          exclusionsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_Exclusions exclusions = 9;</code>
+       */
+      public context.ContextOuterClass.Constraint_Exclusions.Builder getExclusionsBuilder() {
+        return getExclusionsFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Constraint_Exclusions exclusions = 9;</code>
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_ExclusionsOrBuilder getExclusionsOrBuilder() {
+        if ((constraintCase_ == 9) && (exclusionsBuilder_ != null)) {
+          return exclusionsBuilder_.getMessageOrBuilder();
+        } else {
+          if (constraintCase_ == 9) {
+            return (context.ContextOuterClass.Constraint_Exclusions) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_Exclusions.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_Exclusions exclusions = 9;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_Exclusions, context.ContextOuterClass.Constraint_Exclusions.Builder, context.ContextOuterClass.Constraint_ExclusionsOrBuilder> 
+          getExclusionsFieldBuilder() {
+        if (exclusionsBuilder_ == null) {
+          if (!(constraintCase_ == 9)) {
+            constraint_ = context.ContextOuterClass.Constraint_Exclusions.getDefaultInstance();
+          }
+          exclusionsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Constraint_Exclusions, context.ContextOuterClass.Constraint_Exclusions.Builder, context.ContextOuterClass.Constraint_ExclusionsOrBuilder>(
+                  (context.ContextOuterClass.Constraint_Exclusions) constraint_,
+                  getParentForChildren(),
+                  isClean());
+          constraint_ = null;
+        }
+        constraintCase_ = 9;
+        onChanged();;
+        return exclusionsBuilder_;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -61869,6 +74119,11 @@ public final class ContextOuterClass {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_Topology_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_TopologyDetails_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_TopologyDetails_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_TopologyIdList_descriptor;
   private static final 
@@ -61894,6 +74149,11 @@ public final class ContextOuterClass {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_Device_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Component_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Component_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_DeviceConfig_descriptor;
   private static final 
@@ -61909,6 +74169,11 @@ public final class ContextOuterClass {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_DeviceList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_DeviceFilter_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_DeviceFilter_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_DeviceEvent_descriptor;
   private static final 
@@ -61969,6 +74234,11 @@ public final class ContextOuterClass {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_ServiceList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ServiceFilter_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ServiceFilter_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_ServiceEvent_descriptor;
   private static final 
@@ -62009,6 +74279,11 @@ public final class ContextOuterClass {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_SliceList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_SliceFilter_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_SliceFilter_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_SliceEvent_descriptor;
   private static final 
@@ -62074,6 +74349,21 @@ public final class ContextOuterClass {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_EndPoint_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_EndPointName_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_EndPointName_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_EndPointIdList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_EndPointIdList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_EndPointNameList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_EndPointNameList_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_ConfigRule_Custom_descriptor;
   private static final 
@@ -62139,6 +74429,11 @@ public final class ContextOuterClass {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_Constraint_SLA_Isolation_level_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Constraint_Exclusions_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Constraint_Exclusions_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_Constraint_descriptor;
   private static final 
@@ -62169,267 +74464,312 @@ public final class ContextOuterClass {
       "(\001\"Z\n\005Event\022%\n\ttimestamp\030\001 \001(\0132\022.context" +
       ".Timestamp\022*\n\nevent_type\030\002 \001(\0162\026.context" +
       ".EventTypeEnum\"0\n\tContextId\022#\n\014context_u" +
-      "uid\030\001 \001(\0132\r.context.Uuid\"\266\001\n\007Context\022&\n\n" +
-      "context_id\030\001 \001(\0132\022.context.ContextId\022)\n\014" +
-      "topology_ids\030\002 \003(\0132\023.context.TopologyId\022" +
-      "\'\n\013service_ids\030\003 \003(\0132\022.context.ServiceId" +
-      "\022/\n\ncontroller\030\004 \001(\0132\033.context.TeraFlowC" +
-      "ontroller\"8\n\rContextIdList\022\'\n\013context_id" +
-      "s\030\001 \003(\0132\022.context.ContextId\"1\n\013ContextLi" +
-      "st\022\"\n\010contexts\030\001 \003(\0132\020.context.Context\"U" +
-      "\n\014ContextEvent\022\035\n\005event\030\001 \001(\0132\016.context." +
-      "Event\022&\n\ncontext_id\030\002 \001(\0132\022.context.Cont" +
-      "extId\"Z\n\nTopologyId\022&\n\ncontext_id\030\001 \001(\0132" +
-      "\022.context.ContextId\022$\n\rtopology_uuid\030\002 \001" +
-      "(\0132\r.context.Uuid\"~\n\010Topology\022(\n\013topolog" +
-      "y_id\030\001 \001(\0132\023.context.TopologyId\022%\n\ndevic" +
-      "e_ids\030\002 \003(\0132\021.context.DeviceId\022!\n\010link_i" +
-      "ds\030\003 \003(\0132\017.context.LinkId\";\n\016TopologyIdL" +
-      "ist\022)\n\014topology_ids\030\001 \003(\0132\023.context.Topo" +
-      "logyId\"5\n\014TopologyList\022%\n\ntopologies\030\001 \003" +
-      "(\0132\021.context.Topology\"X\n\rTopologyEvent\022\035" +
-      "\n\005event\030\001 \001(\0132\016.context.Event\022(\n\013topolog" +
-      "y_id\030\002 \001(\0132\023.context.TopologyId\".\n\010Devic" +
-      "eId\022\"\n\013device_uuid\030\001 \001(\0132\r.context.Uuid\"" +
-      "\232\002\n\006Device\022$\n\tdevice_id\030\001 \001(\0132\021.context." +
-      "DeviceId\022\023\n\013device_type\030\002 \001(\t\022,\n\rdevice_" +
-      "config\030\003 \001(\0132\025.context.DeviceConfig\022G\n\031d" +
-      "evice_operational_status\030\004 \001(\0162$.context" +
-      ".DeviceOperationalStatusEnum\0221\n\016device_d" +
-      "rivers\030\005 \003(\0162\031.context.DeviceDriverEnum\022" +
-      "+\n\020device_endpoints\030\006 \003(\0132\021.context.EndP" +
-      "oint\"9\n\014DeviceConfig\022)\n\014config_rules\030\001 \003" +
-      "(\0132\023.context.ConfigRule\"5\n\014DeviceIdList\022" +
-      "%\n\ndevice_ids\030\001 \003(\0132\021.context.DeviceId\"." +
-      "\n\nDeviceList\022 \n\007devices\030\001 \003(\0132\017.context." +
-      "Device\"\200\001\n\013DeviceEvent\022\035\n\005event\030\001 \001(\0132\016." +
+      "uid\030\001 \001(\0132\r.context.Uuid\"\351\001\n\007Context\022&\n\n" +
+      "context_id\030\001 \001(\0132\022.context.ContextId\022\014\n\004" +
+      "name\030\002 \001(\t\022)\n\014topology_ids\030\003 \003(\0132\023.conte" +
+      "xt.TopologyId\022\'\n\013service_ids\030\004 \003(\0132\022.con" +
+      "text.ServiceId\022#\n\tslice_ids\030\005 \003(\0132\020.cont" +
+      "ext.SliceId\022/\n\ncontroller\030\006 \001(\0132\033.contex" +
+      "t.TeraFlowController\"8\n\rContextIdList\022\'\n" +
+      "\013context_ids\030\001 \003(\0132\022.context.ContextId\"1" +
+      "\n\013ContextList\022\"\n\010contexts\030\001 \003(\0132\020.contex" +
+      "t.Context\"U\n\014ContextEvent\022\035\n\005event\030\001 \001(\013" +
+      "2\016.context.Event\022&\n\ncontext_id\030\002 \001(\0132\022.c" +
+      "ontext.ContextId\"Z\n\nTopologyId\022&\n\ncontex" +
+      "t_id\030\001 \001(\0132\022.context.ContextId\022$\n\rtopolo" +
+      "gy_uuid\030\002 \001(\0132\r.context.Uuid\"\214\001\n\010Topolog" +
+      "y\022(\n\013topology_id\030\001 \001(\0132\023.context.Topolog" +
+      "yId\022\014\n\004name\030\002 \001(\t\022%\n\ndevice_ids\030\003 \003(\0132\021." +
+      "context.DeviceId\022!\n\010link_ids\030\004 \003(\0132\017.con" +
+      "text.LinkId\"\211\001\n\017TopologyDetails\022(\n\013topol" +
+      "ogy_id\030\001 \001(\0132\023.context.TopologyId\022\014\n\004nam" +
+      "e\030\002 \001(\t\022 \n\007devices\030\003 \003(\0132\017.context.Devic" +
+      "e\022\034\n\005links\030\004 \003(\0132\r.context.Link\";\n\016Topol" +
+      "ogyIdList\022)\n\014topology_ids\030\001 \003(\0132\023.contex" +
+      "t.TopologyId\"5\n\014TopologyList\022%\n\ntopologi" +
+      "es\030\001 \003(\0132\021.context.Topology\"X\n\rTopologyE" +
+      "vent\022\035\n\005event\030\001 \001(\0132\016.context.Event\022(\n\013t" +
+      "opology_id\030\002 \001(\0132\023.context.TopologyId\".\n" +
+      "\010DeviceId\022\"\n\013device_uuid\030\001 \001(\0132\r.context" +
+      ".Uuid\"\371\002\n\006Device\022$\n\tdevice_id\030\001 \001(\0132\021.co" +
+      "ntext.DeviceId\022\014\n\004name\030\002 \001(\t\022\023\n\013device_t" +
+      "ype\030\003 \001(\t\022,\n\rdevice_config\030\004 \001(\0132\025.conte" +
+      "xt.DeviceConfig\022G\n\031device_operational_st" +
+      "atus\030\005 \001(\0162$.context.DeviceOperationalSt" +
+      "atusEnum\0221\n\016device_drivers\030\006 \003(\0162\031.conte" +
+      "xt.DeviceDriverEnum\022+\n\020device_endpoints\030" +
+      "\007 \003(\0132\021.context.EndPoint\022%\n\tcomponent\030\010 " +
+      "\003(\0132\022.context.Component\022(\n\rcontroller_id" +
+      "\030\t \001(\0132\021.context.DeviceId\" \n\tComponent\022\023" +
+      "\n\013comp_string\030\001 \003(\t\"9\n\014DeviceConfig\022)\n\014c" +
+      "onfig_rules\030\001 \003(\0132\023.context.ConfigRule\"5" +
+      "\n\014DeviceIdList\022%\n\ndevice_ids\030\001 \003(\0132\021.con" +
+      "text.DeviceId\".\n\nDeviceList\022 \n\007devices\030\001" +
+      " \003(\0132\017.context.Device\"\216\001\n\014DeviceFilter\022)" +
+      "\n\ndevice_ids\030\001 \001(\0132\025.context.DeviceIdLis" +
+      "t\022\031\n\021include_endpoints\030\002 \001(\010\022\034\n\024include_" +
+      "config_rules\030\003 \001(\010\022\032\n\022include_components" +
+      "\030\004 \001(\010\"\200\001\n\013DeviceEvent\022\035\n\005event\030\001 \001(\0132\016." +
       "context.Event\022$\n\tdevice_id\030\002 \001(\0132\021.conte" +
       "xt.DeviceId\022,\n\rdevice_config\030\003 \001(\0132\025.con" +
       "text.DeviceConfig\"*\n\006LinkId\022 \n\tlink_uuid" +
-      "\030\001 \001(\0132\r.context.Uuid\"X\n\004Link\022 \n\007link_id" +
-      "\030\001 \001(\0132\017.context.LinkId\022.\n\021link_endpoint" +
-      "_ids\030\002 \003(\0132\023.context.EndPointId\"/\n\nLinkI" +
-      "dList\022!\n\010link_ids\030\001 \003(\0132\017.context.LinkId" +
-      "\"(\n\010LinkList\022\034\n\005links\030\001 \003(\0132\r.context.Li" +
-      "nk\"L\n\tLinkEvent\022\035\n\005event\030\001 \001(\0132\016.context" +
-      ".Event\022 \n\007link_id\030\002 \001(\0132\017.context.LinkId" +
-      "\"X\n\tServiceId\022&\n\ncontext_id\030\001 \001(\0132\022.cont" +
-      "ext.ContextId\022#\n\014service_uuid\030\002 \001(\0132\r.co" +
-      "ntext.Uuid\"\315\002\n\007Service\022&\n\nservice_id\030\001 \001" +
-      "(\0132\022.context.ServiceId\022.\n\014service_type\030\002" +
-      " \001(\0162\030.context.ServiceTypeEnum\0221\n\024servic" +
-      "e_endpoint_ids\030\003 \003(\0132\023.context.EndPointI" +
-      "d\0220\n\023service_constraints\030\004 \003(\0132\023.context" +
-      ".Constraint\022.\n\016service_status\030\005 \001(\0132\026.co" +
-      "ntext.ServiceStatus\022.\n\016service_config\030\006 " +
-      "\001(\0132\026.context.ServiceConfig\022%\n\ttimestamp" +
-      "\030\007 \001(\0132\022.context.Timestamp\"C\n\rServiceSta" +
-      "tus\0222\n\016service_status\030\001 \001(\0162\032.context.Se" +
-      "rviceStatusEnum\":\n\rServiceConfig\022)\n\014conf" +
-      "ig_rules\030\001 \003(\0132\023.context.ConfigRule\"8\n\rS" +
-      "erviceIdList\022\'\n\013service_ids\030\001 \003(\0132\022.cont" +
-      "ext.ServiceId\"1\n\013ServiceList\022\"\n\010services" +
-      "\030\001 \003(\0132\020.context.Service\"U\n\014ServiceEvent" +
-      "\022\035\n\005event\030\001 \001(\0132\016.context.Event\022&\n\nservi" +
-      "ce_id\030\002 \001(\0132\022.context.ServiceId\"T\n\007Slice" +
-      "Id\022&\n\ncontext_id\030\001 \001(\0132\022.context.Context" +
-      "Id\022!\n\nslice_uuid\030\002 \001(\0132\r.context.Uuid\"\222\003" +
-      "\n\005Slice\022\"\n\010slice_id\030\001 \001(\0132\020.context.Slic" +
-      "eId\022/\n\022slice_endpoint_ids\030\002 \003(\0132\023.contex" +
-      "t.EndPointId\022.\n\021slice_constraints\030\003 \003(\0132" +
-      "\023.context.Constraint\022-\n\021slice_service_id" +
-      "s\030\004 \003(\0132\022.context.ServiceId\022,\n\022slice_sub" +
-      "slice_ids\030\005 \003(\0132\020.context.SliceId\022*\n\014sli" +
-      "ce_status\030\006 \001(\0132\024.context.SliceStatus\022*\n" +
-      "\014slice_config\030\007 \001(\0132\024.context.SliceConfi" +
-      "g\022(\n\013slice_owner\030\010 \001(\0132\023.context.SliceOw" +
-      "ner\022%\n\ttimestamp\030\t \001(\0132\022.context.Timesta" +
-      "mp\"E\n\nSliceOwner\022!\n\nowner_uuid\030\001 \001(\0132\r.c" +
-      "ontext.Uuid\022\024\n\014owner_string\030\002 \001(\t\"=\n\013Sli" +
-      "ceStatus\022.\n\014slice_status\030\001 \001(\0162\030.context" +
-      ".SliceStatusEnum\"8\n\013SliceConfig\022)\n\014confi" +
-      "g_rules\030\001 \003(\0132\023.context.ConfigRule\"2\n\013Sl" +
-      "iceIdList\022#\n\tslice_ids\030\001 \003(\0132\020.context.S" +
-      "liceId\"+\n\tSliceList\022\036\n\006slices\030\001 \003(\0132\016.co" +
-      "ntext.Slice\"O\n\nSliceEvent\022\035\n\005event\030\001 \001(\013" +
-      "2\016.context.Event\022\"\n\010slice_id\030\002 \001(\0132\020.con" +
-      "text.SliceId\"6\n\014ConnectionId\022&\n\017connecti" +
-      "on_uuid\030\001 \001(\0132\r.context.Uuid\"2\n\025Connecti" +
-      "onSettings_L0\022\031\n\021lsp_symbolic_name\030\001 \001(\t" +
-      "\"\236\001\n\025ConnectionSettings_L2\022\027\n\017src_mac_ad" +
-      "dress\030\001 \001(\t\022\027\n\017dst_mac_address\030\002 \001(\t\022\022\n\n" +
-      "ether_type\030\003 \001(\r\022\017\n\007vlan_id\030\004 \001(\r\022\022\n\nmpl" +
-      "s_label\030\005 \001(\r\022\032\n\022mpls_traffic_class\030\006 \001(" +
-      "\r\"t\n\025ConnectionSettings_L3\022\026\n\016src_ip_add" +
-      "ress\030\001 \001(\t\022\026\n\016dst_ip_address\030\002 \001(\t\022\014\n\004ds" +
-      "cp\030\003 \001(\r\022\020\n\010protocol\030\004 \001(\r\022\013\n\003ttl\030\005 \001(\r\"" +
-      "[\n\025ConnectionSettings_L4\022\020\n\010src_port\030\001 \001" +
-      "(\r\022\020\n\010dst_port\030\002 \001(\r\022\021\n\ttcp_flags\030\003 \001(\r\022" +
-      "\013\n\003ttl\030\004 \001(\r\"\304\001\n\022ConnectionSettings\022*\n\002l" +
-      "0\030\001 \001(\0132\036.context.ConnectionSettings_L0\022" +
-      "*\n\002l2\030\002 \001(\0132\036.context.ConnectionSettings" +
-      "_L2\022*\n\002l3\030\003 \001(\0132\036.context.ConnectionSett" +
-      "ings_L3\022*\n\002l4\030\004 \001(\0132\036.context.Connection" +
-      "Settings_L4\"\363\001\n\nConnection\022,\n\rconnection" +
-      "_id\030\001 \001(\0132\025.context.ConnectionId\022&\n\nserv" +
-      "ice_id\030\002 \001(\0132\022.context.ServiceId\0223\n\026path" +
-      "_hops_endpoint_ids\030\003 \003(\0132\023.context.EndPo" +
-      "intId\022+\n\017sub_service_ids\030\004 \003(\0132\022.context" +
-      ".ServiceId\022-\n\010settings\030\005 \001(\0132\033.context.C" +
-      "onnectionSettings\"A\n\020ConnectionIdList\022-\n" +
-      "\016connection_ids\030\001 \003(\0132\025.context.Connecti" +
-      "onId\":\n\016ConnectionList\022(\n\013connections\030\001 " +
-      "\003(\0132\023.context.Connection\"^\n\017ConnectionEv" +
-      "ent\022\035\n\005event\030\001 \001(\0132\016.context.Event\022,\n\rco" +
-      "nnection_id\030\002 \001(\0132\025.context.ConnectionId" +
-      "\"\202\001\n\nEndPointId\022(\n\013topology_id\030\001 \001(\0132\023.c" +
-      "ontext.TopologyId\022$\n\tdevice_id\030\002 \001(\0132\021.c" +
-      "ontext.DeviceId\022$\n\rendpoint_uuid\030\003 \001(\0132\r" +
-      ".context.Uuid\"\264\001\n\010EndPoint\022(\n\013endpoint_i" +
-      "d\030\001 \001(\0132\023.context.EndPointId\022\025\n\rendpoint" +
-      "_type\030\002 \001(\t\0229\n\020kpi_sample_types\030\003 \003(\0162\037." +
-      "kpi_sample_types.KpiSampleType\022,\n\021endpoi" +
-      "nt_location\030\004 \001(\0132\021.context.Location\"A\n\021" +
-      "ConfigRule_Custom\022\024\n\014resource_key\030\001 \001(\t\022" +
-      "\026\n\016resource_value\030\002 \001(\t\"]\n\016ConfigRule_AC" +
-      "L\022(\n\013endpoint_id\030\001 \001(\0132\023.context.EndPoin" +
-      "tId\022!\n\010rule_set\030\002 \001(\0132\017.acl.AclRuleSet\"\234" +
-      "\001\n\nConfigRule\022)\n\006action\030\001 \001(\0162\031.context." +
-      "ConfigActionEnum\022,\n\006custom\030\002 \001(\0132\032.conte" +
-      "xt.ConfigRule_CustomH\000\022&\n\003acl\030\003 \001(\0132\027.co" +
-      "ntext.ConfigRule_ACLH\000B\r\n\013config_rule\"F\n" +
-      "\021Constraint_Custom\022\027\n\017constraint_type\030\001 " +
-      "\001(\t\022\030\n\020constraint_value\030\002 \001(\t\"E\n\023Constra" +
-      "int_Schedule\022\027\n\017start_timestamp\030\001 \001(\002\022\025\n" +
-      "\rduration_days\030\002 \001(\002\"3\n\014GPS_Position\022\020\n\010" +
-      "latitude\030\001 \001(\002\022\021\n\tlongitude\030\002 \001(\002\"W\n\010Loc" +
-      "ation\022\020\n\006region\030\001 \001(\tH\000\022-\n\014gps_position\030" +
-      "\002 \001(\0132\025.context.GPS_PositionH\000B\n\n\010locati" +
-      "on\"l\n\033Constraint_EndPointLocation\022(\n\013end" +
-      "point_id\030\001 \001(\0132\023.context.EndPointId\022#\n\010l" +
-      "ocation\030\002 \001(\0132\021.context.Location\"Y\n\033Cons" +
-      "traint_EndPointPriority\022(\n\013endpoint_id\030\001" +
-      " \001(\0132\023.context.EndPointId\022\020\n\010priority\030\002 " +
-      "\001(\r\"0\n\026Constraint_SLA_Latency\022\026\n\016e2e_lat" +
-      "ency_ms\030\001 \001(\002\"0\n\027Constraint_SLA_Capacity" +
-      "\022\025\n\rcapacity_gbps\030\001 \001(\002\"M\n\033Constraint_SL" +
-      "A_Availability\022\032\n\022num_disjoint_paths\030\001 \001" +
-      "(\r\022\022\n\nall_active\030\002 \001(\010\"V\n\036Constraint_SLA" +
-      "_Isolation_level\0224\n\017isolation_level\030\001 \003(" +
-      "\0162\033.context.IsolationLevelEnum\"\366\003\n\nConst" +
-      "raint\022,\n\006custom\030\001 \001(\0132\032.context.Constrai" +
-      "nt_CustomH\000\0220\n\010schedule\030\002 \001(\0132\034.context." +
-      "Constraint_ScheduleH\000\022A\n\021endpoint_locati" +
-      "on\030\003 \001(\0132$.context.Constraint_EndPointLo" +
-      "cationH\000\022A\n\021endpoint_priority\030\004 \001(\0132$.co" +
-      "ntext.Constraint_EndPointPriorityH\000\0228\n\014s" +
-      "la_capacity\030\005 \001(\0132 .context.Constraint_S" +
-      "LA_CapacityH\000\0226\n\013sla_latency\030\006 \001(\0132\037.con" +
-      "text.Constraint_SLA_LatencyH\000\022@\n\020sla_ava" +
-      "ilability\030\007 \001(\0132$.context.Constraint_SLA" +
-      "_AvailabilityH\000\022@\n\rsla_isolation\030\010 \001(\0132\'" +
-      ".context.Constraint_SLA_Isolation_levelH" +
-      "\000B\014\n\nconstraint\"^\n\022TeraFlowController\022&\n" +
-      "\ncontext_id\030\001 \001(\0132\022.context.ContextId\022\022\n" +
-      "\nip_address\030\002 \001(\t\022\014\n\004port\030\003 \001(\r\"U\n\024Authe" +
-      "nticationResult\022&\n\ncontext_id\030\001 \001(\0132\022.co" +
-      "ntext.ContextId\022\025\n\rauthenticated\030\002 \001(\010*j" +
-      "\n\rEventTypeEnum\022\027\n\023EVENTTYPE_UNDEFINED\020\000" +
-      "\022\024\n\020EVENTTYPE_CREATE\020\001\022\024\n\020EVENTTYPE_UPDA" +
-      "TE\020\002\022\024\n\020EVENTTYPE_REMOVE\020\003*\332\001\n\020DeviceDri" +
-      "verEnum\022\032\n\026DEVICEDRIVER_UNDEFINED\020\000\022\033\n\027D" +
-      "EVICEDRIVER_OPENCONFIG\020\001\022\036\n\032DEVICEDRIVER" +
-      "_TRANSPORT_API\020\002\022\023\n\017DEVICEDRIVER_P4\020\003\022&\n" +
-      "\"DEVICEDRIVER_IETF_NETWORK_TOPOLOGY\020\004\022\033\n" +
-      "\027DEVICEDRIVER_ONF_TR_352\020\005\022\023\n\017DEVICEDRIV" +
-      "ER_XR\020\006*\217\001\n\033DeviceOperationalStatusEnum\022" +
-      "%\n!DEVICEOPERATIONALSTATUS_UNDEFINED\020\000\022$" +
-      "\n DEVICEOPERATIONALSTATUS_DISABLED\020\001\022#\n\037" +
-      "DEVICEOPERATIONALSTATUS_ENABLED\020\002*\201\001\n\017Se" +
-      "rviceTypeEnum\022\027\n\023SERVICETYPE_UNKNOWN\020\000\022\024" +
-      "\n\020SERVICETYPE_L3NM\020\001\022\024\n\020SERVICETYPE_L2NM" +
-      "\020\002\022)\n%SERVICETYPE_TAPI_CONNECTIVITY_SERV" +
-      "ICE\020\003*\250\001\n\021ServiceStatusEnum\022\033\n\027SERVICEST" +
-      "ATUS_UNDEFINED\020\000\022\031\n\025SERVICESTATUS_PLANNE" +
-      "D\020\001\022\030\n\024SERVICESTATUS_ACTIVE\020\002\022!\n\035SERVICE" +
-      "STATUS_PENDING_REMOVAL\020\003\022\036\n\032SERVICESTATU" +
-      "S_SLA_VIOLATED\020\004*\251\001\n\017SliceStatusEnum\022\031\n\025" +
-      "SLICESTATUS_UNDEFINED\020\000\022\027\n\023SLICESTATUS_P" +
-      "LANNED\020\001\022\024\n\020SLICESTATUS_INIT\020\002\022\026\n\022SLICES" +
-      "TATUS_ACTIVE\020\003\022\026\n\022SLICESTATUS_DEINIT\020\004\022\034" +
-      "\n\030SLICESTATUS_SLA_VIOLATED\020\005*]\n\020ConfigAc" +
-      "tionEnum\022\032\n\026CONFIGACTION_UNDEFINED\020\000\022\024\n\020" +
-      "CONFIGACTION_SET\020\001\022\027\n\023CONFIGACTION_DELET" +
-      "E\020\002*\203\002\n\022IsolationLevelEnum\022\020\n\014NO_ISOLATI" +
-      "ON\020\000\022\026\n\022PHYSICAL_ISOLATION\020\001\022\025\n\021LOGICAL_" +
-      "ISOLATION\020\002\022\025\n\021PROCESS_ISOLATION\020\003\022\035\n\031PH" +
-      "YSICAL_MEMORY_ISOLATION\020\004\022\036\n\032PHYSICAL_NE" +
-      "TWORK_ISOLATION\020\005\022\036\n\032VIRTUAL_RESOURCE_IS" +
-      "OLATION\020\006\022\037\n\033NETWORK_FUNCTIONS_ISOLATION" +
-      "\020\007\022\025\n\021SERVICE_ISOLATION\020\0102\331\023\n\016ContextSer" +
-      "vice\022:\n\016ListContextIds\022\016.context.Empty\032\026" +
-      ".context.ContextIdList\"\000\0226\n\014ListContexts" +
-      "\022\016.context.Empty\032\024.context.ContextList\"\000" +
-      "\0224\n\nGetContext\022\022.context.ContextId\032\020.con" +
-      "text.Context\"\000\0224\n\nSetContext\022\020.context.C" +
-      "ontext\032\022.context.ContextId\"\000\0225\n\rRemoveCo" +
-      "ntext\022\022.context.ContextId\032\016.context.Empt" +
-      "y\"\000\022=\n\020GetContextEvents\022\016.context.Empty\032" +
-      "\025.context.ContextEvent\"\0000\001\022@\n\017ListTopolo" +
-      "gyIds\022\022.context.ContextId\032\027.context.Topo" +
-      "logyIdList\"\000\022=\n\016ListTopologies\022\022.context" +
-      ".ContextId\032\025.context.TopologyList\"\000\0227\n\013G" +
-      "etTopology\022\023.context.TopologyId\032\021.contex" +
-      "t.Topology\"\000\0227\n\013SetTopology\022\021.context.To" +
-      "pology\032\023.context.TopologyId\"\000\0227\n\016RemoveT" +
-      "opology\022\023.context.TopologyId\032\016.context.E" +
-      "mpty\"\000\022?\n\021GetTopologyEvents\022\016.context.Em" +
-      "pty\032\026.context.TopologyEvent\"\0000\001\0228\n\rListD" +
-      "eviceIds\022\016.context.Empty\032\025.context.Devic" +
-      "eIdList\"\000\0224\n\013ListDevices\022\016.context.Empty" +
-      "\032\023.context.DeviceList\"\000\0221\n\tGetDevice\022\021.c" +
-      "ontext.DeviceId\032\017.context.Device\"\000\0221\n\tSe" +
-      "tDevice\022\017.context.Device\032\021.context.Devic" +
-      "eId\"\000\0223\n\014RemoveDevice\022\021.context.DeviceId" +
-      "\032\016.context.Empty\"\000\022;\n\017GetDeviceEvents\022\016." +
-      "context.Empty\032\024.context.DeviceEvent\"\0000\001\022" +
-      "4\n\013ListLinkIds\022\016.context.Empty\032\023.context" +
-      ".LinkIdList\"\000\0220\n\tListLinks\022\016.context.Emp" +
-      "ty\032\021.context.LinkList\"\000\022+\n\007GetLink\022\017.con" +
-      "text.LinkId\032\r.context.Link\"\000\022+\n\007SetLink\022" +
-      "\r.context.Link\032\017.context.LinkId\"\000\022/\n\nRem" +
-      "oveLink\022\017.context.LinkId\032\016.context.Empty" +
-      "\"\000\0227\n\rGetLinkEvents\022\016.context.Empty\032\022.co" +
-      "ntext.LinkEvent\"\0000\001\022>\n\016ListServiceIds\022\022." +
-      "context.ContextId\032\026.context.ServiceIdLis" +
-      "t\"\000\022:\n\014ListServices\022\022.context.ContextId\032" +
-      "\024.context.ServiceList\"\000\0224\n\nGetService\022\022." +
-      "context.ServiceId\032\020.context.Service\"\000\0224\n" +
-      "\nSetService\022\020.context.Service\032\022.context." +
-      "ServiceId\"\000\0226\n\014UnsetService\022\020.context.Se" +
-      "rvice\032\022.context.ServiceId\"\000\0225\n\rRemoveSer" +
-      "vice\022\022.context.ServiceId\032\016.context.Empty" +
-      "\"\000\022=\n\020GetServiceEvents\022\016.context.Empty\032\025" +
-      ".context.ServiceEvent\"\0000\001\022:\n\014ListSliceId" +
-      "s\022\022.context.ContextId\032\024.context.SliceIdL" +
-      "ist\"\000\0226\n\nListSlices\022\022.context.ContextId\032" +
-      "\022.context.SliceList\"\000\022.\n\010GetSlice\022\020.cont" +
-      "ext.SliceId\032\016.context.Slice\"\000\022.\n\010SetSlic" +
-      "e\022\016.context.Slice\032\020.context.SliceId\"\000\0220\n" +
-      "\nUnsetSlice\022\016.context.Slice\032\020.context.Sl" +
-      "iceId\"\000\0221\n\013RemoveSlice\022\020.context.SliceId" +
-      "\032\016.context.Empty\"\000\0229\n\016GetSliceEvents\022\016.c" +
-      "ontext.Empty\032\023.context.SliceEvent\"\0000\001\022D\n" +
-      "\021ListConnectionIds\022\022.context.ServiceId\032\031" +
-      ".context.ConnectionIdList\"\000\022@\n\017ListConne" +
-      "ctions\022\022.context.ServiceId\032\027.context.Con" +
-      "nectionList\"\000\022=\n\rGetConnection\022\025.context" +
-      ".ConnectionId\032\023.context.Connection\"\000\022=\n\r" +
-      "SetConnection\022\023.context.Connection\032\025.con" +
-      "text.ConnectionId\"\000\022;\n\020RemoveConnection\022" +
-      "\025.context.ConnectionId\032\016.context.Empty\"\000" +
-      "\022C\n\023GetConnectionEvents\022\016.context.Empty\032" +
-      "\030.context.ConnectionEvent\"\0000\001b\006proto3"
+      "\030\001 \001(\0132\r.context.Uuid\"f\n\004Link\022 \n\007link_id" +
+      "\030\001 \001(\0132\017.context.LinkId\022\014\n\004name\030\002 \001(\t\022.\n" +
+      "\021link_endpoint_ids\030\003 \003(\0132\023.context.EndPo" +
+      "intId\"/\n\nLinkIdList\022!\n\010link_ids\030\001 \003(\0132\017." +
+      "context.LinkId\"(\n\010LinkList\022\034\n\005links\030\001 \003(" +
+      "\0132\r.context.Link\"L\n\tLinkEvent\022\035\n\005event\030\001" +
+      " \001(\0132\016.context.Event\022 \n\007link_id\030\002 \001(\0132\017." +
+      "context.LinkId\"X\n\tServiceId\022&\n\ncontext_i" +
+      "d\030\001 \001(\0132\022.context.ContextId\022#\n\014service_u" +
+      "uid\030\002 \001(\0132\r.context.Uuid\"\333\002\n\007Service\022&\n\n" +
+      "service_id\030\001 \001(\0132\022.context.ServiceId\022\014\n\004" +
+      "name\030\002 \001(\t\022.\n\014service_type\030\003 \001(\0162\030.conte" +
+      "xt.ServiceTypeEnum\0221\n\024service_endpoint_i" +
+      "ds\030\004 \003(\0132\023.context.EndPointId\0220\n\023service" +
+      "_constraints\030\005 \003(\0132\023.context.Constraint\022" +
+      ".\n\016service_status\030\006 \001(\0132\026.context.Servic" +
+      "eStatus\022.\n\016service_config\030\007 \001(\0132\026.contex" +
+      "t.ServiceConfig\022%\n\ttimestamp\030\010 \001(\0132\022.con" +
+      "text.Timestamp\"C\n\rServiceStatus\0222\n\016servi" +
+      "ce_status\030\001 \001(\0162\032.context.ServiceStatusE" +
+      "num\":\n\rServiceConfig\022)\n\014config_rules\030\001 \003" +
+      "(\0132\023.context.ConfigRule\"8\n\rServiceIdList" +
+      "\022\'\n\013service_ids\030\001 \003(\0132\022.context.ServiceI" +
+      "d\"1\n\013ServiceList\022\"\n\010services\030\001 \003(\0132\020.con" +
+      "text.Service\"\225\001\n\rServiceFilter\022+\n\013servic" +
+      "e_ids\030\001 \001(\0132\026.context.ServiceIdList\022\034\n\024i" +
+      "nclude_endpoint_ids\030\002 \001(\010\022\033\n\023include_con" +
+      "straints\030\003 \001(\010\022\034\n\024include_config_rules\030\004" +
+      " \001(\010\"U\n\014ServiceEvent\022\035\n\005event\030\001 \001(\0132\016.co" +
+      "ntext.Event\022&\n\nservice_id\030\002 \001(\0132\022.contex" +
+      "t.ServiceId\"T\n\007SliceId\022&\n\ncontext_id\030\001 \001" +
+      "(\0132\022.context.ContextId\022!\n\nslice_uuid\030\002 \001" +
+      "(\0132\r.context.Uuid\"\240\003\n\005Slice\022\"\n\010slice_id\030" +
+      "\001 \001(\0132\020.context.SliceId\022\014\n\004name\030\002 \001(\t\022/\n" +
+      "\022slice_endpoint_ids\030\003 \003(\0132\023.context.EndP" +
+      "ointId\022.\n\021slice_constraints\030\004 \003(\0132\023.cont" +
+      "ext.Constraint\022-\n\021slice_service_ids\030\005 \003(" +
+      "\0132\022.context.ServiceId\022,\n\022slice_subslice_" +
+      "ids\030\006 \003(\0132\020.context.SliceId\022*\n\014slice_sta" +
+      "tus\030\007 \001(\0132\024.context.SliceStatus\022*\n\014slice" +
+      "_config\030\010 \001(\0132\024.context.SliceConfig\022(\n\013s" +
+      "lice_owner\030\t \001(\0132\023.context.SliceOwner\022%\n" +
+      "\ttimestamp\030\n \001(\0132\022.context.Timestamp\"E\n\n" +
+      "SliceOwner\022!\n\nowner_uuid\030\001 \001(\0132\r.context" +
+      ".Uuid\022\024\n\014owner_string\030\002 \001(\t\"=\n\013SliceStat" +
+      "us\022.\n\014slice_status\030\001 \001(\0162\030.context.Slice" +
+      "StatusEnum\"8\n\013SliceConfig\022)\n\014config_rule" +
+      "s\030\001 \003(\0132\023.context.ConfigRule\"2\n\013SliceIdL" +
+      "ist\022#\n\tslice_ids\030\001 \003(\0132\020.context.SliceId" +
+      "\"+\n\tSliceList\022\036\n\006slices\030\001 \003(\0132\016.context." +
+      "Slice\"\312\001\n\013SliceFilter\022\'\n\tslice_ids\030\001 \001(\013" +
+      "2\024.context.SliceIdList\022\034\n\024include_endpoi" +
+      "nt_ids\030\002 \001(\010\022\033\n\023include_constraints\030\003 \001(" +
+      "\010\022\033\n\023include_service_ids\030\004 \001(\010\022\034\n\024includ" +
+      "e_subslice_ids\030\005 \001(\010\022\034\n\024include_config_r" +
+      "ules\030\006 \001(\010\"O\n\nSliceEvent\022\035\n\005event\030\001 \001(\0132" +
+      "\016.context.Event\022\"\n\010slice_id\030\002 \001(\0132\020.cont" +
+      "ext.SliceId\"6\n\014ConnectionId\022&\n\017connectio" +
+      "n_uuid\030\001 \001(\0132\r.context.Uuid\"2\n\025Connectio" +
+      "nSettings_L0\022\031\n\021lsp_symbolic_name\030\001 \001(\t\"" +
+      "\236\001\n\025ConnectionSettings_L2\022\027\n\017src_mac_add" +
+      "ress\030\001 \001(\t\022\027\n\017dst_mac_address\030\002 \001(\t\022\022\n\ne" +
+      "ther_type\030\003 \001(\r\022\017\n\007vlan_id\030\004 \001(\r\022\022\n\nmpls" +
+      "_label\030\005 \001(\r\022\032\n\022mpls_traffic_class\030\006 \001(\r" +
+      "\"t\n\025ConnectionSettings_L3\022\026\n\016src_ip_addr" +
+      "ess\030\001 \001(\t\022\026\n\016dst_ip_address\030\002 \001(\t\022\014\n\004dsc" +
+      "p\030\003 \001(\r\022\020\n\010protocol\030\004 \001(\r\022\013\n\003ttl\030\005 \001(\r\"[" +
+      "\n\025ConnectionSettings_L4\022\020\n\010src_port\030\001 \001(" +
+      "\r\022\020\n\010dst_port\030\002 \001(\r\022\021\n\ttcp_flags\030\003 \001(\r\022\013" +
+      "\n\003ttl\030\004 \001(\r\"\304\001\n\022ConnectionSettings\022*\n\002l0" +
+      "\030\001 \001(\0132\036.context.ConnectionSettings_L0\022*" +
+      "\n\002l2\030\002 \001(\0132\036.context.ConnectionSettings_" +
+      "L2\022*\n\002l3\030\003 \001(\0132\036.context.ConnectionSetti" +
+      "ngs_L3\022*\n\002l4\030\004 \001(\0132\036.context.ConnectionS" +
+      "ettings_L4\"\363\001\n\nConnection\022,\n\rconnection_" +
+      "id\030\001 \001(\0132\025.context.ConnectionId\022&\n\nservi" +
+      "ce_id\030\002 \001(\0132\022.context.ServiceId\0223\n\026path_" +
+      "hops_endpoint_ids\030\003 \003(\0132\023.context.EndPoi" +
+      "ntId\022+\n\017sub_service_ids\030\004 \003(\0132\022.context." +
+      "ServiceId\022-\n\010settings\030\005 \001(\0132\033.context.Co" +
+      "nnectionSettings\"A\n\020ConnectionIdList\022-\n\016" +
+      "connection_ids\030\001 \003(\0132\025.context.Connectio" +
+      "nId\":\n\016ConnectionList\022(\n\013connections\030\001 \003" +
+      "(\0132\023.context.Connection\"^\n\017ConnectionEve" +
+      "nt\022\035\n\005event\030\001 \001(\0132\016.context.Event\022,\n\rcon" +
+      "nection_id\030\002 \001(\0132\025.context.ConnectionId\"" +
+      "\202\001\n\nEndPointId\022(\n\013topology_id\030\001 \001(\0132\023.co" +
+      "ntext.TopologyId\022$\n\tdevice_id\030\002 \001(\0132\021.co" +
+      "ntext.DeviceId\022$\n\rendpoint_uuid\030\003 \001(\0132\r." +
+      "context.Uuid\"\302\001\n\010EndPoint\022(\n\013endpoint_id" +
+      "\030\001 \001(\0132\023.context.EndPointId\022\014\n\004name\030\002 \001(" +
+      "\t\022\025\n\rendpoint_type\030\003 \001(\t\0229\n\020kpi_sample_t" +
+      "ypes\030\004 \003(\0162\037.kpi_sample_types.KpiSampleT" +
+      "ype\022,\n\021endpoint_location\030\005 \001(\0132\021.context" +
+      ".Location\"{\n\014EndPointName\022(\n\013endpoint_id" +
+      "\030\001 \001(\0132\023.context.EndPointId\022\023\n\013device_na" +
+      "me\030\002 \001(\t\022\025\n\rendpoint_name\030\003 \001(\t\022\025\n\rendpo" +
+      "int_type\030\004 \001(\t\";\n\016EndPointIdList\022)\n\014endp" +
+      "oint_ids\030\001 \003(\0132\023.context.EndPointId\"A\n\020E" +
+      "ndPointNameList\022-\n\016endpoint_names\030\001 \003(\0132" +
+      "\025.context.EndPointName\"A\n\021ConfigRule_Cus" +
+      "tom\022\024\n\014resource_key\030\001 \001(\t\022\026\n\016resource_va" +
+      "lue\030\002 \001(\t\"]\n\016ConfigRule_ACL\022(\n\013endpoint_" +
+      "id\030\001 \001(\0132\023.context.EndPointId\022!\n\010rule_se" +
+      "t\030\002 \001(\0132\017.acl.AclRuleSet\"\234\001\n\nConfigRule\022" +
+      ")\n\006action\030\001 \001(\0162\031.context.ConfigActionEn" +
+      "um\022,\n\006custom\030\002 \001(\0132\032.context.ConfigRule_" +
+      "CustomH\000\022&\n\003acl\030\003 \001(\0132\027.context.ConfigRu" +
+      "le_ACLH\000B\r\n\013config_rule\"F\n\021Constraint_Cu" +
+      "stom\022\027\n\017constraint_type\030\001 \001(\t\022\030\n\020constra" +
+      "int_value\030\002 \001(\t\"E\n\023Constraint_Schedule\022\027" +
+      "\n\017start_timestamp\030\001 \001(\002\022\025\n\rduration_days" +
+      "\030\002 \001(\002\"3\n\014GPS_Position\022\020\n\010latitude\030\001 \001(\002" +
+      "\022\021\n\tlongitude\030\002 \001(\002\"W\n\010Location\022\020\n\006regio" +
+      "n\030\001 \001(\tH\000\022-\n\014gps_position\030\002 \001(\0132\025.contex" +
+      "t.GPS_PositionH\000B\n\n\010location\"l\n\033Constrai" +
+      "nt_EndPointLocation\022(\n\013endpoint_id\030\001 \001(\013" +
+      "2\023.context.EndPointId\022#\n\010location\030\002 \001(\0132" +
+      "\021.context.Location\"Y\n\033Constraint_EndPoin" +
+      "tPriority\022(\n\013endpoint_id\030\001 \001(\0132\023.context" +
+      ".EndPointId\022\020\n\010priority\030\002 \001(\r\"0\n\026Constra" +
+      "int_SLA_Latency\022\026\n\016e2e_latency_ms\030\001 \001(\002\"" +
+      "0\n\027Constraint_SLA_Capacity\022\025\n\rcapacity_g" +
+      "bps\030\001 \001(\002\"c\n\033Constraint_SLA_Availability" +
+      "\022\032\n\022num_disjoint_paths\030\001 \001(\r\022\022\n\nall_acti" +
+      "ve\030\002 \001(\010\022\024\n\014availability\030\003 \001(\002\"V\n\036Constr" +
+      "aint_SLA_Isolation_level\0224\n\017isolation_le" +
+      "vel\030\001 \003(\0162\033.context.IsolationLevelEnum\"\242" +
+      "\001\n\025Constraint_Exclusions\022\024\n\014is_permanent" +
+      "\030\001 \001(\010\022%\n\ndevice_ids\030\002 \003(\0132\021.context.Dev" +
+      "iceId\022)\n\014endpoint_ids\030\003 \003(\0132\023.context.En" +
+      "dPointId\022!\n\010link_ids\030\004 \003(\0132\017.context.Lin" +
+      "kId\"\254\004\n\nConstraint\022,\n\006custom\030\001 \001(\0132\032.con" +
+      "text.Constraint_CustomH\000\0220\n\010schedule\030\002 \001" +
+      "(\0132\034.context.Constraint_ScheduleH\000\022A\n\021en" +
+      "dpoint_location\030\003 \001(\0132$.context.Constrai" +
+      "nt_EndPointLocationH\000\022A\n\021endpoint_priori" +
+      "ty\030\004 \001(\0132$.context.Constraint_EndPointPr" +
+      "iorityH\000\0228\n\014sla_capacity\030\005 \001(\0132 .context" +
+      ".Constraint_SLA_CapacityH\000\0226\n\013sla_latenc" +
+      "y\030\006 \001(\0132\037.context.Constraint_SLA_Latency" +
+      "H\000\022@\n\020sla_availability\030\007 \001(\0132$.context.C" +
+      "onstraint_SLA_AvailabilityH\000\022@\n\rsla_isol" +
+      "ation\030\010 \001(\0132\'.context.Constraint_SLA_Iso" +
+      "lation_levelH\000\0224\n\nexclusions\030\t \001(\0132\036.con" +
+      "text.Constraint_ExclusionsH\000B\014\n\nconstrai" +
+      "nt\"^\n\022TeraFlowController\022&\n\ncontext_id\030\001" +
+      " \001(\0132\022.context.ContextId\022\022\n\nip_address\030\002" +
+      " \001(\t\022\014\n\004port\030\003 \001(\r\"U\n\024AuthenticationResu" +
+      "lt\022&\n\ncontext_id\030\001 \001(\0132\022.context.Context" +
+      "Id\022\025\n\rauthenticated\030\002 \001(\010*j\n\rEventTypeEn" +
+      "um\022\027\n\023EVENTTYPE_UNDEFINED\020\000\022\024\n\020EVENTTYPE" +
+      "_CREATE\020\001\022\024\n\020EVENTTYPE_UPDATE\020\002\022\024\n\020EVENT" +
+      "TYPE_REMOVE\020\003*\367\001\n\020DeviceDriverEnum\022\032\n\026DE" +
+      "VICEDRIVER_UNDEFINED\020\000\022\033\n\027DEVICEDRIVER_O" +
+      "PENCONFIG\020\001\022\036\n\032DEVICEDRIVER_TRANSPORT_AP" +
+      "I\020\002\022\023\n\017DEVICEDRIVER_P4\020\003\022&\n\"DEVICEDRIVER" +
+      "_IETF_NETWORK_TOPOLOGY\020\004\022\033\n\027DEVICEDRIVER" +
+      "_ONF_TR_352\020\005\022\023\n\017DEVICEDRIVER_XR\020\006\022\033\n\027DE" +
+      "VICEDRIVER_IETF_L2VPN\020\007*\217\001\n\033DeviceOperat" +
+      "ionalStatusEnum\022%\n!DEVICEOPERATIONALSTAT" +
+      "US_UNDEFINED\020\000\022$\n DEVICEOPERATIONALSTATU" +
+      "S_DISABLED\020\001\022#\n\037DEVICEOPERATIONALSTATUS_" +
+      "ENABLED\020\002*\201\001\n\017ServiceTypeEnum\022\027\n\023SERVICE" +
+      "TYPE_UNKNOWN\020\000\022\024\n\020SERVICETYPE_L3NM\020\001\022\024\n\020" +
+      "SERVICETYPE_L2NM\020\002\022)\n%SERVICETYPE_TAPI_C" +
+      "ONNECTIVITY_SERVICE\020\003*\304\001\n\021ServiceStatusE" +
+      "num\022\033\n\027SERVICESTATUS_UNDEFINED\020\000\022\031\n\025SERV" +
+      "ICESTATUS_PLANNED\020\001\022\030\n\024SERVICESTATUS_ACT" +
+      "IVE\020\002\022\032\n\026SERVICESTATUS_UPDATING\020\003\022!\n\035SER" +
+      "VICESTATUS_PENDING_REMOVAL\020\004\022\036\n\032SERVICES" +
+      "TATUS_SLA_VIOLATED\020\005*\251\001\n\017SliceStatusEnum" +
+      "\022\031\n\025SLICESTATUS_UNDEFINED\020\000\022\027\n\023SLICESTAT" +
+      "US_PLANNED\020\001\022\024\n\020SLICESTATUS_INIT\020\002\022\026\n\022SL" +
+      "ICESTATUS_ACTIVE\020\003\022\026\n\022SLICESTATUS_DEINIT" +
+      "\020\004\022\034\n\030SLICESTATUS_SLA_VIOLATED\020\005*]\n\020Conf" +
+      "igActionEnum\022\032\n\026CONFIGACTION_UNDEFINED\020\000" +
+      "\022\024\n\020CONFIGACTION_SET\020\001\022\027\n\023CONFIGACTION_D" +
+      "ELETE\020\002*\203\002\n\022IsolationLevelEnum\022\020\n\014NO_ISO" +
+      "LATION\020\000\022\026\n\022PHYSICAL_ISOLATION\020\001\022\025\n\021LOGI" +
+      "CAL_ISOLATION\020\002\022\025\n\021PROCESS_ISOLATION\020\003\022\035" +
+      "\n\031PHYSICAL_MEMORY_ISOLATION\020\004\022\036\n\032PHYSICA" +
+      "L_NETWORK_ISOLATION\020\005\022\036\n\032VIRTUAL_RESOURC" +
+      "E_ISOLATION\020\006\022\037\n\033NETWORK_FUNCTIONS_ISOLA" +
+      "TION\020\007\022\025\n\021SERVICE_ISOLATION\020\0102\245\026\n\016Contex" +
+      "tService\022:\n\016ListContextIds\022\016.context.Emp" +
+      "ty\032\026.context.ContextIdList\"\000\0226\n\014ListCont" +
+      "exts\022\016.context.Empty\032\024.context.ContextLi" +
+      "st\"\000\0224\n\nGetContext\022\022.context.ContextId\032\020" +
+      ".context.Context\"\000\0224\n\nSetContext\022\020.conte" +
+      "xt.Context\032\022.context.ContextId\"\000\0225\n\rRemo" +
+      "veContext\022\022.context.ContextId\032\016.context." +
+      "Empty\"\000\022=\n\020GetContextEvents\022\016.context.Em" +
+      "pty\032\025.context.ContextEvent\"\0000\001\022@\n\017ListTo" +
+      "pologyIds\022\022.context.ContextId\032\027.context." +
+      "TopologyIdList\"\000\022=\n\016ListTopologies\022\022.con" +
+      "text.ContextId\032\025.context.TopologyList\"\000\022" +
+      "7\n\013GetTopology\022\023.context.TopologyId\032\021.co" +
+      "ntext.Topology\"\000\022E\n\022GetTopologyDetails\022\023" +
+      ".context.TopologyId\032\030.context.TopologyDe" +
+      "tails\"\000\0227\n\013SetTopology\022\021.context.Topolog" +
+      "y\032\023.context.TopologyId\"\000\0227\n\016RemoveTopolo" +
+      "gy\022\023.context.TopologyId\032\016.context.Empty\"" +
+      "\000\022?\n\021GetTopologyEvents\022\016.context.Empty\032\026" +
+      ".context.TopologyEvent\"\0000\001\0228\n\rListDevice" +
+      "Ids\022\016.context.Empty\032\025.context.DeviceIdLi" +
+      "st\"\000\0224\n\013ListDevices\022\016.context.Empty\032\023.co" +
+      "ntext.DeviceList\"\000\0221\n\tGetDevice\022\021.contex" +
+      "t.DeviceId\032\017.context.Device\"\000\0221\n\tSetDevi" +
+      "ce\022\017.context.Device\032\021.context.DeviceId\"\000" +
+      "\0223\n\014RemoveDevice\022\021.context.DeviceId\032\016.co" +
+      "ntext.Empty\"\000\022;\n\017GetDeviceEvents\022\016.conte" +
+      "xt.Empty\032\024.context.DeviceEvent\"\0000\001\022<\n\014Se" +
+      "lectDevice\022\025.context.DeviceFilter\032\023.cont" +
+      "ext.DeviceList\"\000\022I\n\021ListEndPointNames\022\027." +
+      "context.EndPointIdList\032\031.context.EndPoin" +
+      "tNameList\"\000\0224\n\013ListLinkIds\022\016.context.Emp" +
+      "ty\032\023.context.LinkIdList\"\000\0220\n\tListLinks\022\016" +
+      ".context.Empty\032\021.context.LinkList\"\000\022+\n\007G" +
+      "etLink\022\017.context.LinkId\032\r.context.Link\"\000" +
+      "\022+\n\007SetLink\022\r.context.Link\032\017.context.Lin" +
+      "kId\"\000\022/\n\nRemoveLink\022\017.context.LinkId\032\016.c" +
+      "ontext.Empty\"\000\0227\n\rGetLinkEvents\022\016.contex" +
+      "t.Empty\032\022.context.LinkEvent\"\0000\001\022>\n\016ListS" +
+      "erviceIds\022\022.context.ContextId\032\026.context." +
+      "ServiceIdList\"\000\022:\n\014ListServices\022\022.contex" +
+      "t.ContextId\032\024.context.ServiceList\"\000\0224\n\nG" +
+      "etService\022\022.context.ServiceId\032\020.context." +
+      "Service\"\000\0224\n\nSetService\022\020.context.Servic" +
+      "e\032\022.context.ServiceId\"\000\0226\n\014UnsetService\022" +
+      "\020.context.Service\032\022.context.ServiceId\"\000\022" +
+      "5\n\rRemoveService\022\022.context.ServiceId\032\016.c" +
+      "ontext.Empty\"\000\022=\n\020GetServiceEvents\022\016.con" +
+      "text.Empty\032\025.context.ServiceEvent\"\0000\001\022?\n" +
+      "\rSelectService\022\026.context.ServiceFilter\032\024" +
+      ".context.ServiceList\"\000\022:\n\014ListSliceIds\022\022" +
+      ".context.ContextId\032\024.context.SliceIdList" +
+      "\"\000\0226\n\nListSlices\022\022.context.ContextId\032\022.c" +
+      "ontext.SliceList\"\000\022.\n\010GetSlice\022\020.context" +
+      ".SliceId\032\016.context.Slice\"\000\022.\n\010SetSlice\022\016" +
+      ".context.Slice\032\020.context.SliceId\"\000\0220\n\nUn" +
+      "setSlice\022\016.context.Slice\032\020.context.Slice" +
+      "Id\"\000\0221\n\013RemoveSlice\022\020.context.SliceId\032\016." +
+      "context.Empty\"\000\0229\n\016GetSliceEvents\022\016.cont" +
+      "ext.Empty\032\023.context.SliceEvent\"\0000\001\0229\n\013Se" +
+      "lectSlice\022\024.context.SliceFilter\032\022.contex" +
+      "t.SliceList\"\000\022D\n\021ListConnectionIds\022\022.con" +
+      "text.ServiceId\032\031.context.ConnectionIdLis" +
+      "t\"\000\022@\n\017ListConnections\022\022.context.Service" +
+      "Id\032\027.context.ConnectionList\"\000\022=\n\rGetConn" +
+      "ection\022\025.context.ConnectionId\032\023.context." +
+      "Connection\"\000\022=\n\rSetConnection\022\023.context." +
+      "Connection\032\025.context.ConnectionId\"\000\022;\n\020R" +
+      "emoveConnection\022\025.context.ConnectionId\032\016" +
+      ".context.Empty\"\000\022C\n\023GetConnectionEvents\022" +
+      "\016.context.Empty\032\030.context.ConnectionEven" +
+      "t\"\0000\001b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -62472,7 +74812,7 @@ public final class ContextOuterClass {
     internal_static_context_Context_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Context_descriptor,
-        new java.lang.String[] { "ContextId", "TopologyIds", "ServiceIds", "Controller", });
+        new java.lang.String[] { "ContextId", "Name", "TopologyIds", "ServiceIds", "SliceIds", "Controller", });
     internal_static_context_ContextIdList_descriptor =
       getDescriptor().getMessageTypes().get(6);
     internal_static_context_ContextIdList_fieldAccessorTable = new
@@ -62502,345 +74842,399 @@ public final class ContextOuterClass {
     internal_static_context_Topology_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Topology_descriptor,
-        new java.lang.String[] { "TopologyId", "DeviceIds", "LinkIds", });
-    internal_static_context_TopologyIdList_descriptor =
+        new java.lang.String[] { "TopologyId", "Name", "DeviceIds", "LinkIds", });
+    internal_static_context_TopologyDetails_descriptor =
       getDescriptor().getMessageTypes().get(11);
+    internal_static_context_TopologyDetails_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_TopologyDetails_descriptor,
+        new java.lang.String[] { "TopologyId", "Name", "Devices", "Links", });
+    internal_static_context_TopologyIdList_descriptor =
+      getDescriptor().getMessageTypes().get(12);
     internal_static_context_TopologyIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_TopologyIdList_descriptor,
         new java.lang.String[] { "TopologyIds", });
     internal_static_context_TopologyList_descriptor =
-      getDescriptor().getMessageTypes().get(12);
+      getDescriptor().getMessageTypes().get(13);
     internal_static_context_TopologyList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_TopologyList_descriptor,
         new java.lang.String[] { "Topologies", });
     internal_static_context_TopologyEvent_descriptor =
-      getDescriptor().getMessageTypes().get(13);
+      getDescriptor().getMessageTypes().get(14);
     internal_static_context_TopologyEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_TopologyEvent_descriptor,
         new java.lang.String[] { "Event", "TopologyId", });
     internal_static_context_DeviceId_descriptor =
-      getDescriptor().getMessageTypes().get(14);
+      getDescriptor().getMessageTypes().get(15);
     internal_static_context_DeviceId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_DeviceId_descriptor,
         new java.lang.String[] { "DeviceUuid", });
     internal_static_context_Device_descriptor =
-      getDescriptor().getMessageTypes().get(15);
+      getDescriptor().getMessageTypes().get(16);
     internal_static_context_Device_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Device_descriptor,
-        new java.lang.String[] { "DeviceId", "DeviceType", "DeviceConfig", "DeviceOperationalStatus", "DeviceDrivers", "DeviceEndpoints", });
+        new java.lang.String[] { "DeviceId", "Name", "DeviceType", "DeviceConfig", "DeviceOperationalStatus", "DeviceDrivers", "DeviceEndpoints", "Component", "ControllerId", });
+    internal_static_context_Component_descriptor =
+      getDescriptor().getMessageTypes().get(17);
+    internal_static_context_Component_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Component_descriptor,
+        new java.lang.String[] { "CompString", });
     internal_static_context_DeviceConfig_descriptor =
-      getDescriptor().getMessageTypes().get(16);
+      getDescriptor().getMessageTypes().get(18);
     internal_static_context_DeviceConfig_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_DeviceConfig_descriptor,
         new java.lang.String[] { "ConfigRules", });
     internal_static_context_DeviceIdList_descriptor =
-      getDescriptor().getMessageTypes().get(17);
+      getDescriptor().getMessageTypes().get(19);
     internal_static_context_DeviceIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_DeviceIdList_descriptor,
         new java.lang.String[] { "DeviceIds", });
     internal_static_context_DeviceList_descriptor =
-      getDescriptor().getMessageTypes().get(18);
+      getDescriptor().getMessageTypes().get(20);
     internal_static_context_DeviceList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_DeviceList_descriptor,
         new java.lang.String[] { "Devices", });
+    internal_static_context_DeviceFilter_descriptor =
+      getDescriptor().getMessageTypes().get(21);
+    internal_static_context_DeviceFilter_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_DeviceFilter_descriptor,
+        new java.lang.String[] { "DeviceIds", "IncludeEndpoints", "IncludeConfigRules", "IncludeComponents", });
     internal_static_context_DeviceEvent_descriptor =
-      getDescriptor().getMessageTypes().get(19);
+      getDescriptor().getMessageTypes().get(22);
     internal_static_context_DeviceEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_DeviceEvent_descriptor,
         new java.lang.String[] { "Event", "DeviceId", "DeviceConfig", });
     internal_static_context_LinkId_descriptor =
-      getDescriptor().getMessageTypes().get(20);
+      getDescriptor().getMessageTypes().get(23);
     internal_static_context_LinkId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_LinkId_descriptor,
         new java.lang.String[] { "LinkUuid", });
     internal_static_context_Link_descriptor =
-      getDescriptor().getMessageTypes().get(21);
+      getDescriptor().getMessageTypes().get(24);
     internal_static_context_Link_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Link_descriptor,
-        new java.lang.String[] { "LinkId", "LinkEndpointIds", });
+        new java.lang.String[] { "LinkId", "Name", "LinkEndpointIds", });
     internal_static_context_LinkIdList_descriptor =
-      getDescriptor().getMessageTypes().get(22);
+      getDescriptor().getMessageTypes().get(25);
     internal_static_context_LinkIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_LinkIdList_descriptor,
         new java.lang.String[] { "LinkIds", });
     internal_static_context_LinkList_descriptor =
-      getDescriptor().getMessageTypes().get(23);
+      getDescriptor().getMessageTypes().get(26);
     internal_static_context_LinkList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_LinkList_descriptor,
         new java.lang.String[] { "Links", });
     internal_static_context_LinkEvent_descriptor =
-      getDescriptor().getMessageTypes().get(24);
+      getDescriptor().getMessageTypes().get(27);
     internal_static_context_LinkEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_LinkEvent_descriptor,
         new java.lang.String[] { "Event", "LinkId", });
     internal_static_context_ServiceId_descriptor =
-      getDescriptor().getMessageTypes().get(25);
+      getDescriptor().getMessageTypes().get(28);
     internal_static_context_ServiceId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ServiceId_descriptor,
         new java.lang.String[] { "ContextId", "ServiceUuid", });
     internal_static_context_Service_descriptor =
-      getDescriptor().getMessageTypes().get(26);
+      getDescriptor().getMessageTypes().get(29);
     internal_static_context_Service_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Service_descriptor,
-        new java.lang.String[] { "ServiceId", "ServiceType", "ServiceEndpointIds", "ServiceConstraints", "ServiceStatus", "ServiceConfig", "Timestamp", });
+        new java.lang.String[] { "ServiceId", "Name", "ServiceType", "ServiceEndpointIds", "ServiceConstraints", "ServiceStatus", "ServiceConfig", "Timestamp", });
     internal_static_context_ServiceStatus_descriptor =
-      getDescriptor().getMessageTypes().get(27);
+      getDescriptor().getMessageTypes().get(30);
     internal_static_context_ServiceStatus_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ServiceStatus_descriptor,
         new java.lang.String[] { "ServiceStatus", });
     internal_static_context_ServiceConfig_descriptor =
-      getDescriptor().getMessageTypes().get(28);
+      getDescriptor().getMessageTypes().get(31);
     internal_static_context_ServiceConfig_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ServiceConfig_descriptor,
         new java.lang.String[] { "ConfigRules", });
     internal_static_context_ServiceIdList_descriptor =
-      getDescriptor().getMessageTypes().get(29);
+      getDescriptor().getMessageTypes().get(32);
     internal_static_context_ServiceIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ServiceIdList_descriptor,
         new java.lang.String[] { "ServiceIds", });
     internal_static_context_ServiceList_descriptor =
-      getDescriptor().getMessageTypes().get(30);
+      getDescriptor().getMessageTypes().get(33);
     internal_static_context_ServiceList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ServiceList_descriptor,
         new java.lang.String[] { "Services", });
+    internal_static_context_ServiceFilter_descriptor =
+      getDescriptor().getMessageTypes().get(34);
+    internal_static_context_ServiceFilter_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ServiceFilter_descriptor,
+        new java.lang.String[] { "ServiceIds", "IncludeEndpointIds", "IncludeConstraints", "IncludeConfigRules", });
     internal_static_context_ServiceEvent_descriptor =
-      getDescriptor().getMessageTypes().get(31);
+      getDescriptor().getMessageTypes().get(35);
     internal_static_context_ServiceEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ServiceEvent_descriptor,
         new java.lang.String[] { "Event", "ServiceId", });
     internal_static_context_SliceId_descriptor =
-      getDescriptor().getMessageTypes().get(32);
+      getDescriptor().getMessageTypes().get(36);
     internal_static_context_SliceId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceId_descriptor,
         new java.lang.String[] { "ContextId", "SliceUuid", });
     internal_static_context_Slice_descriptor =
-      getDescriptor().getMessageTypes().get(33);
+      getDescriptor().getMessageTypes().get(37);
     internal_static_context_Slice_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Slice_descriptor,
-        new java.lang.String[] { "SliceId", "SliceEndpointIds", "SliceConstraints", "SliceServiceIds", "SliceSubsliceIds", "SliceStatus", "SliceConfig", "SliceOwner", "Timestamp", });
+        new java.lang.String[] { "SliceId", "Name", "SliceEndpointIds", "SliceConstraints", "SliceServiceIds", "SliceSubsliceIds", "SliceStatus", "SliceConfig", "SliceOwner", "Timestamp", });
     internal_static_context_SliceOwner_descriptor =
-      getDescriptor().getMessageTypes().get(34);
+      getDescriptor().getMessageTypes().get(38);
     internal_static_context_SliceOwner_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceOwner_descriptor,
         new java.lang.String[] { "OwnerUuid", "OwnerString", });
     internal_static_context_SliceStatus_descriptor =
-      getDescriptor().getMessageTypes().get(35);
+      getDescriptor().getMessageTypes().get(39);
     internal_static_context_SliceStatus_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceStatus_descriptor,
         new java.lang.String[] { "SliceStatus", });
     internal_static_context_SliceConfig_descriptor =
-      getDescriptor().getMessageTypes().get(36);
+      getDescriptor().getMessageTypes().get(40);
     internal_static_context_SliceConfig_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceConfig_descriptor,
         new java.lang.String[] { "ConfigRules", });
     internal_static_context_SliceIdList_descriptor =
-      getDescriptor().getMessageTypes().get(37);
+      getDescriptor().getMessageTypes().get(41);
     internal_static_context_SliceIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceIdList_descriptor,
         new java.lang.String[] { "SliceIds", });
     internal_static_context_SliceList_descriptor =
-      getDescriptor().getMessageTypes().get(38);
+      getDescriptor().getMessageTypes().get(42);
     internal_static_context_SliceList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceList_descriptor,
         new java.lang.String[] { "Slices", });
+    internal_static_context_SliceFilter_descriptor =
+      getDescriptor().getMessageTypes().get(43);
+    internal_static_context_SliceFilter_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_SliceFilter_descriptor,
+        new java.lang.String[] { "SliceIds", "IncludeEndpointIds", "IncludeConstraints", "IncludeServiceIds", "IncludeSubsliceIds", "IncludeConfigRules", });
     internal_static_context_SliceEvent_descriptor =
-      getDescriptor().getMessageTypes().get(39);
+      getDescriptor().getMessageTypes().get(44);
     internal_static_context_SliceEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceEvent_descriptor,
         new java.lang.String[] { "Event", "SliceId", });
     internal_static_context_ConnectionId_descriptor =
-      getDescriptor().getMessageTypes().get(40);
+      getDescriptor().getMessageTypes().get(45);
     internal_static_context_ConnectionId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionId_descriptor,
         new java.lang.String[] { "ConnectionUuid", });
     internal_static_context_ConnectionSettings_L0_descriptor =
-      getDescriptor().getMessageTypes().get(41);
+      getDescriptor().getMessageTypes().get(46);
     internal_static_context_ConnectionSettings_L0_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionSettings_L0_descriptor,
         new java.lang.String[] { "LspSymbolicName", });
     internal_static_context_ConnectionSettings_L2_descriptor =
-      getDescriptor().getMessageTypes().get(42);
+      getDescriptor().getMessageTypes().get(47);
     internal_static_context_ConnectionSettings_L2_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionSettings_L2_descriptor,
         new java.lang.String[] { "SrcMacAddress", "DstMacAddress", "EtherType", "VlanId", "MplsLabel", "MplsTrafficClass", });
     internal_static_context_ConnectionSettings_L3_descriptor =
-      getDescriptor().getMessageTypes().get(43);
+      getDescriptor().getMessageTypes().get(48);
     internal_static_context_ConnectionSettings_L3_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionSettings_L3_descriptor,
         new java.lang.String[] { "SrcIpAddress", "DstIpAddress", "Dscp", "Protocol", "Ttl", });
     internal_static_context_ConnectionSettings_L4_descriptor =
-      getDescriptor().getMessageTypes().get(44);
+      getDescriptor().getMessageTypes().get(49);
     internal_static_context_ConnectionSettings_L4_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionSettings_L4_descriptor,
         new java.lang.String[] { "SrcPort", "DstPort", "TcpFlags", "Ttl", });
     internal_static_context_ConnectionSettings_descriptor =
-      getDescriptor().getMessageTypes().get(45);
+      getDescriptor().getMessageTypes().get(50);
     internal_static_context_ConnectionSettings_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionSettings_descriptor,
         new java.lang.String[] { "L0", "L2", "L3", "L4", });
     internal_static_context_Connection_descriptor =
-      getDescriptor().getMessageTypes().get(46);
+      getDescriptor().getMessageTypes().get(51);
     internal_static_context_Connection_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Connection_descriptor,
         new java.lang.String[] { "ConnectionId", "ServiceId", "PathHopsEndpointIds", "SubServiceIds", "Settings", });
     internal_static_context_ConnectionIdList_descriptor =
-      getDescriptor().getMessageTypes().get(47);
+      getDescriptor().getMessageTypes().get(52);
     internal_static_context_ConnectionIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionIdList_descriptor,
         new java.lang.String[] { "ConnectionIds", });
     internal_static_context_ConnectionList_descriptor =
-      getDescriptor().getMessageTypes().get(48);
+      getDescriptor().getMessageTypes().get(53);
     internal_static_context_ConnectionList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionList_descriptor,
         new java.lang.String[] { "Connections", });
     internal_static_context_ConnectionEvent_descriptor =
-      getDescriptor().getMessageTypes().get(49);
+      getDescriptor().getMessageTypes().get(54);
     internal_static_context_ConnectionEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionEvent_descriptor,
         new java.lang.String[] { "Event", "ConnectionId", });
     internal_static_context_EndPointId_descriptor =
-      getDescriptor().getMessageTypes().get(50);
+      getDescriptor().getMessageTypes().get(55);
     internal_static_context_EndPointId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_EndPointId_descriptor,
         new java.lang.String[] { "TopologyId", "DeviceId", "EndpointUuid", });
     internal_static_context_EndPoint_descriptor =
-      getDescriptor().getMessageTypes().get(51);
+      getDescriptor().getMessageTypes().get(56);
     internal_static_context_EndPoint_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_EndPoint_descriptor,
-        new java.lang.String[] { "EndpointId", "EndpointType", "KpiSampleTypes", "EndpointLocation", });
+        new java.lang.String[] { "EndpointId", "Name", "EndpointType", "KpiSampleTypes", "EndpointLocation", });
+    internal_static_context_EndPointName_descriptor =
+      getDescriptor().getMessageTypes().get(57);
+    internal_static_context_EndPointName_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_EndPointName_descriptor,
+        new java.lang.String[] { "EndpointId", "DeviceName", "EndpointName", "EndpointType", });
+    internal_static_context_EndPointIdList_descriptor =
+      getDescriptor().getMessageTypes().get(58);
+    internal_static_context_EndPointIdList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_EndPointIdList_descriptor,
+        new java.lang.String[] { "EndpointIds", });
+    internal_static_context_EndPointNameList_descriptor =
+      getDescriptor().getMessageTypes().get(59);
+    internal_static_context_EndPointNameList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_EndPointNameList_descriptor,
+        new java.lang.String[] { "EndpointNames", });
     internal_static_context_ConfigRule_Custom_descriptor =
-      getDescriptor().getMessageTypes().get(52);
+      getDescriptor().getMessageTypes().get(60);
     internal_static_context_ConfigRule_Custom_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConfigRule_Custom_descriptor,
         new java.lang.String[] { "ResourceKey", "ResourceValue", });
     internal_static_context_ConfigRule_ACL_descriptor =
-      getDescriptor().getMessageTypes().get(53);
+      getDescriptor().getMessageTypes().get(61);
     internal_static_context_ConfigRule_ACL_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConfigRule_ACL_descriptor,
         new java.lang.String[] { "EndpointId", "RuleSet", });
     internal_static_context_ConfigRule_descriptor =
-      getDescriptor().getMessageTypes().get(54);
+      getDescriptor().getMessageTypes().get(62);
     internal_static_context_ConfigRule_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConfigRule_descriptor,
         new java.lang.String[] { "Action", "Custom", "Acl", "ConfigRule", });
     internal_static_context_Constraint_Custom_descriptor =
-      getDescriptor().getMessageTypes().get(55);
+      getDescriptor().getMessageTypes().get(63);
     internal_static_context_Constraint_Custom_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_Custom_descriptor,
         new java.lang.String[] { "ConstraintType", "ConstraintValue", });
     internal_static_context_Constraint_Schedule_descriptor =
-      getDescriptor().getMessageTypes().get(56);
+      getDescriptor().getMessageTypes().get(64);
     internal_static_context_Constraint_Schedule_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_Schedule_descriptor,
         new java.lang.String[] { "StartTimestamp", "DurationDays", });
     internal_static_context_GPS_Position_descriptor =
-      getDescriptor().getMessageTypes().get(57);
+      getDescriptor().getMessageTypes().get(65);
     internal_static_context_GPS_Position_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_GPS_Position_descriptor,
         new java.lang.String[] { "Latitude", "Longitude", });
     internal_static_context_Location_descriptor =
-      getDescriptor().getMessageTypes().get(58);
+      getDescriptor().getMessageTypes().get(66);
     internal_static_context_Location_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Location_descriptor,
         new java.lang.String[] { "Region", "GpsPosition", "Location", });
     internal_static_context_Constraint_EndPointLocation_descriptor =
-      getDescriptor().getMessageTypes().get(59);
+      getDescriptor().getMessageTypes().get(67);
     internal_static_context_Constraint_EndPointLocation_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_EndPointLocation_descriptor,
         new java.lang.String[] { "EndpointId", "Location", });
     internal_static_context_Constraint_EndPointPriority_descriptor =
-      getDescriptor().getMessageTypes().get(60);
+      getDescriptor().getMessageTypes().get(68);
     internal_static_context_Constraint_EndPointPriority_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_EndPointPriority_descriptor,
         new java.lang.String[] { "EndpointId", "Priority", });
     internal_static_context_Constraint_SLA_Latency_descriptor =
-      getDescriptor().getMessageTypes().get(61);
+      getDescriptor().getMessageTypes().get(69);
     internal_static_context_Constraint_SLA_Latency_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_SLA_Latency_descriptor,
         new java.lang.String[] { "E2ELatencyMs", });
     internal_static_context_Constraint_SLA_Capacity_descriptor =
-      getDescriptor().getMessageTypes().get(62);
+      getDescriptor().getMessageTypes().get(70);
     internal_static_context_Constraint_SLA_Capacity_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_SLA_Capacity_descriptor,
         new java.lang.String[] { "CapacityGbps", });
     internal_static_context_Constraint_SLA_Availability_descriptor =
-      getDescriptor().getMessageTypes().get(63);
+      getDescriptor().getMessageTypes().get(71);
     internal_static_context_Constraint_SLA_Availability_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_SLA_Availability_descriptor,
-        new java.lang.String[] { "NumDisjointPaths", "AllActive", });
+        new java.lang.String[] { "NumDisjointPaths", "AllActive", "Availability", });
     internal_static_context_Constraint_SLA_Isolation_level_descriptor =
-      getDescriptor().getMessageTypes().get(64);
+      getDescriptor().getMessageTypes().get(72);
     internal_static_context_Constraint_SLA_Isolation_level_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_SLA_Isolation_level_descriptor,
         new java.lang.String[] { "IsolationLevel", });
+    internal_static_context_Constraint_Exclusions_descriptor =
+      getDescriptor().getMessageTypes().get(73);
+    internal_static_context_Constraint_Exclusions_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Constraint_Exclusions_descriptor,
+        new java.lang.String[] { "IsPermanent", "DeviceIds", "EndpointIds", "LinkIds", });
     internal_static_context_Constraint_descriptor =
-      getDescriptor().getMessageTypes().get(65);
+      getDescriptor().getMessageTypes().get(74);
     internal_static_context_Constraint_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_descriptor,
-        new java.lang.String[] { "Custom", "Schedule", "EndpointLocation", "EndpointPriority", "SlaCapacity", "SlaLatency", "SlaAvailability", "SlaIsolation", "Constraint", });
+        new java.lang.String[] { "Custom", "Schedule", "EndpointLocation", "EndpointPriority", "SlaCapacity", "SlaLatency", "SlaAvailability", "SlaIsolation", "Exclusions", "Constraint", });
     internal_static_context_TeraFlowController_descriptor =
-      getDescriptor().getMessageTypes().get(66);
+      getDescriptor().getMessageTypes().get(75);
     internal_static_context_TeraFlowController_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_TeraFlowController_descriptor,
         new java.lang.String[] { "ContextId", "IpAddress", "Port", });
     internal_static_context_AuthenticationResult_descriptor =
-      getDescriptor().getMessageTypes().get(67);
+      getDescriptor().getMessageTypes().get(76);
     internal_static_context_AuthenticationResult_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_AuthenticationResult_descriptor,
diff --git a/src/policy/target/generated-sources/grpc/context/ContextService.java b/src/policy/target/generated-sources/grpc/context/ContextService.java
index 814ea98b65370f8fd3ffd752c77bec04997a5dd6..b356bac75e24f5f412c51de5450d284ea340ce12 100644
--- a/src/policy/target/generated-sources/grpc/context/ContextService.java
+++ b/src/policy/target/generated-sources/grpc/context/ContextService.java
@@ -24,6 +24,8 @@ public interface ContextService extends MutinyService {
     
     io.smallrye.mutiny.Uni<context.ContextOuterClass.Topology> getTopology(context.ContextOuterClass.TopologyId request);
     
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyDetails> getTopologyDetails(context.ContextOuterClass.TopologyId request);
+    
     io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyId> setTopology(context.ContextOuterClass.Topology request);
     
     io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeTopology(context.ContextOuterClass.TopologyId request);
@@ -38,6 +40,10 @@ public interface ContextService extends MutinyService {
     
     io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeDevice(context.ContextOuterClass.DeviceId request);
     
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceList> selectDevice(context.ContextOuterClass.DeviceFilter request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.EndPointNameList> listEndPointNames(context.ContextOuterClass.EndPointIdList request);
+    
     io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkIdList> listLinkIds(context.ContextOuterClass.Empty request);
     
     io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkList> listLinks(context.ContextOuterClass.Empty request);
@@ -60,6 +66,8 @@ public interface ContextService extends MutinyService {
     
     io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeService(context.ContextOuterClass.ServiceId request);
     
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceList> selectService(context.ContextOuterClass.ServiceFilter request);
+    
     io.smallrye.mutiny.Uni<context.ContextOuterClass.SliceIdList> listSliceIds(context.ContextOuterClass.ContextId request);
     
     io.smallrye.mutiny.Uni<context.ContextOuterClass.SliceList> listSlices(context.ContextOuterClass.ContextId request);
@@ -72,6 +80,8 @@ public interface ContextService extends MutinyService {
     
     io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeSlice(context.ContextOuterClass.SliceId request);
     
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.SliceList> selectSlice(context.ContextOuterClass.SliceFilter request);
+    
     io.smallrye.mutiny.Uni<context.ContextOuterClass.ConnectionIdList> listConnectionIds(context.ContextOuterClass.ServiceId request);
     
     io.smallrye.mutiny.Uni<context.ContextOuterClass.ConnectionList> listConnections(context.ContextOuterClass.ServiceId request);
diff --git a/src/policy/target/generated-sources/grpc/context/ContextServiceBean.java b/src/policy/target/generated-sources/grpc/context/ContextServiceBean.java
index 2b0099f106265e34d1f60bb3e0ecdc35f81895ee..45a7959c4425a981fcbdaba6b06c22cd2fe769ac 100644
--- a/src/policy/target/generated-sources/grpc/context/ContextServiceBean.java
+++ b/src/policy/target/generated-sources/grpc/context/ContextServiceBean.java
@@ -80,6 +80,14 @@ public class ContextServiceBean extends MutinyContextServiceGrpc.ContextServiceI
        }
     }
     @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyDetails> getTopologyDetails(context.ContextOuterClass.TopologyId request) {
+       try {
+         return delegate.getTopologyDetails(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
     public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyId> setTopology(context.ContextOuterClass.Topology request) {
        try {
          return delegate.setTopology(request);
@@ -136,6 +144,22 @@ public class ContextServiceBean extends MutinyContextServiceGrpc.ContextServiceI
        }
     }
     @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceList> selectDevice(context.ContextOuterClass.DeviceFilter request) {
+       try {
+         return delegate.selectDevice(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.EndPointNameList> listEndPointNames(context.ContextOuterClass.EndPointIdList request) {
+       try {
+         return delegate.listEndPointNames(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
     public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkIdList> listLinkIds(context.ContextOuterClass.Empty request) {
        try {
          return delegate.listLinkIds(request);
@@ -224,6 +248,14 @@ public class ContextServiceBean extends MutinyContextServiceGrpc.ContextServiceI
        }
     }
     @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceList> selectService(context.ContextOuterClass.ServiceFilter request) {
+       try {
+         return delegate.selectService(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
     public io.smallrye.mutiny.Uni<context.ContextOuterClass.SliceIdList> listSliceIds(context.ContextOuterClass.ContextId request) {
        try {
          return delegate.listSliceIds(request);
@@ -272,6 +304,14 @@ public class ContextServiceBean extends MutinyContextServiceGrpc.ContextServiceI
        }
     }
     @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.SliceList> selectSlice(context.ContextOuterClass.SliceFilter request) {
+       try {
+         return delegate.selectSlice(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
     public io.smallrye.mutiny.Uni<context.ContextOuterClass.ConnectionIdList> listConnectionIds(context.ContextOuterClass.ServiceId request) {
        try {
          return delegate.listConnectionIds(request);
diff --git a/src/policy/target/generated-sources/grpc/context/ContextServiceClient.java b/src/policy/target/generated-sources/grpc/context/ContextServiceClient.java
index c518a0b4622522728e0eb22fdbeb80442b10f7ef..0b0e9f83f74d1ce33ba6d609544dabb590024758 100644
--- a/src/policy/target/generated-sources/grpc/context/ContextServiceClient.java
+++ b/src/policy/target/generated-sources/grpc/context/ContextServiceClient.java
@@ -53,6 +53,10 @@ public class ContextServiceClient implements ContextService, MutinyClient<Mutiny
        return stub.getTopology(request);
     }
     @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyDetails> getTopologyDetails(context.ContextOuterClass.TopologyId request) {
+       return stub.getTopologyDetails(request);
+    }
+    @Override
     public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyId> setTopology(context.ContextOuterClass.Topology request) {
        return stub.setTopology(request);
     }
@@ -81,6 +85,14 @@ public class ContextServiceClient implements ContextService, MutinyClient<Mutiny
        return stub.removeDevice(request);
     }
     @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceList> selectDevice(context.ContextOuterClass.DeviceFilter request) {
+       return stub.selectDevice(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.EndPointNameList> listEndPointNames(context.ContextOuterClass.EndPointIdList request) {
+       return stub.listEndPointNames(request);
+    }
+    @Override
     public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkIdList> listLinkIds(context.ContextOuterClass.Empty request) {
        return stub.listLinkIds(request);
     }
@@ -125,6 +137,10 @@ public class ContextServiceClient implements ContextService, MutinyClient<Mutiny
        return stub.removeService(request);
     }
     @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceList> selectService(context.ContextOuterClass.ServiceFilter request) {
+       return stub.selectService(request);
+    }
+    @Override
     public io.smallrye.mutiny.Uni<context.ContextOuterClass.SliceIdList> listSliceIds(context.ContextOuterClass.ContextId request) {
        return stub.listSliceIds(request);
     }
@@ -149,6 +165,10 @@ public class ContextServiceClient implements ContextService, MutinyClient<Mutiny
        return stub.removeSlice(request);
     }
     @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.SliceList> selectSlice(context.ContextOuterClass.SliceFilter request) {
+       return stub.selectSlice(request);
+    }
+    @Override
     public io.smallrye.mutiny.Uni<context.ContextOuterClass.ConnectionIdList> listConnectionIds(context.ContextOuterClass.ServiceId request) {
        return stub.listConnectionIds(request);
     }
diff --git a/src/policy/target/generated-sources/grpc/context/ContextServiceGrpc.java b/src/policy/target/generated-sources/grpc/context/ContextServiceGrpc.java
index f59378086c84d0776cc25fb7aa9640403b072c0f..27c73f5424bcf2d6739b5884f4946ced1515398c 100644
--- a/src/policy/target/generated-sources/grpc/context/ContextServiceGrpc.java
+++ b/src/policy/target/generated-sources/grpc/context/ContextServiceGrpc.java
@@ -293,6 +293,37 @@ public final class ContextServiceGrpc {
     return getGetTopologyMethod;
   }
 
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.TopologyId,
+      context.ContextOuterClass.TopologyDetails> getGetTopologyDetailsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetTopologyDetails",
+      requestType = context.ContextOuterClass.TopologyId.class,
+      responseType = context.ContextOuterClass.TopologyDetails.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.TopologyId,
+      context.ContextOuterClass.TopologyDetails> getGetTopologyDetailsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyDetails> getGetTopologyDetailsMethod;
+    if ((getGetTopologyDetailsMethod = ContextServiceGrpc.getGetTopologyDetailsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getGetTopologyDetailsMethod = ContextServiceGrpc.getGetTopologyDetailsMethod) == null) {
+          ContextServiceGrpc.getGetTopologyDetailsMethod = getGetTopologyDetailsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyDetails>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetTopologyDetails"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.TopologyId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.TopologyDetails.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetTopologyDetails"))
+              .build();
+        }
+      }
+    }
+    return getGetTopologyDetailsMethod;
+  }
+
   private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Topology,
       context.ContextOuterClass.TopologyId> getSetTopologyMethod;
 
@@ -572,6 +603,68 @@ public final class ContextServiceGrpc {
     return getGetDeviceEventsMethod;
   }
 
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceFilter,
+      context.ContextOuterClass.DeviceList> getSelectDeviceMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "SelectDevice",
+      requestType = context.ContextOuterClass.DeviceFilter.class,
+      responseType = context.ContextOuterClass.DeviceList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceFilter,
+      context.ContextOuterClass.DeviceList> getSelectDeviceMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceFilter, context.ContextOuterClass.DeviceList> getSelectDeviceMethod;
+    if ((getSelectDeviceMethod = ContextServiceGrpc.getSelectDeviceMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getSelectDeviceMethod = ContextServiceGrpc.getSelectDeviceMethod) == null) {
+          ContextServiceGrpc.getSelectDeviceMethod = getSelectDeviceMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.DeviceFilter, context.ContextOuterClass.DeviceList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SelectDevice"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.DeviceFilter.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.DeviceList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("SelectDevice"))
+              .build();
+        }
+      }
+    }
+    return getSelectDeviceMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.EndPointIdList,
+      context.ContextOuterClass.EndPointNameList> getListEndPointNamesMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListEndPointNames",
+      requestType = context.ContextOuterClass.EndPointIdList.class,
+      responseType = context.ContextOuterClass.EndPointNameList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.EndPointIdList,
+      context.ContextOuterClass.EndPointNameList> getListEndPointNamesMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.EndPointIdList, context.ContextOuterClass.EndPointNameList> getListEndPointNamesMethod;
+    if ((getListEndPointNamesMethod = ContextServiceGrpc.getListEndPointNamesMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getListEndPointNamesMethod = ContextServiceGrpc.getListEndPointNamesMethod) == null) {
+          ContextServiceGrpc.getListEndPointNamesMethod = getListEndPointNamesMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.EndPointIdList, context.ContextOuterClass.EndPointNameList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListEndPointNames"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.EndPointIdList.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.EndPointNameList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("ListEndPointNames"))
+              .build();
+        }
+      }
+    }
+    return getListEndPointNamesMethod;
+  }
+
   private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
       context.ContextOuterClass.LinkIdList> getListLinkIdsMethod;
 
@@ -975,6 +1068,37 @@ public final class ContextServiceGrpc {
     return getGetServiceEventsMethod;
   }
 
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceFilter,
+      context.ContextOuterClass.ServiceList> getSelectServiceMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "SelectService",
+      requestType = context.ContextOuterClass.ServiceFilter.class,
+      responseType = context.ContextOuterClass.ServiceList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceFilter,
+      context.ContextOuterClass.ServiceList> getSelectServiceMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceFilter, context.ContextOuterClass.ServiceList> getSelectServiceMethod;
+    if ((getSelectServiceMethod = ContextServiceGrpc.getSelectServiceMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getSelectServiceMethod = ContextServiceGrpc.getSelectServiceMethod) == null) {
+          ContextServiceGrpc.getSelectServiceMethod = getSelectServiceMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.ServiceFilter, context.ContextOuterClass.ServiceList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SelectService"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ServiceFilter.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ServiceList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("SelectService"))
+              .build();
+        }
+      }
+    }
+    return getSelectServiceMethod;
+  }
+
   private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
       context.ContextOuterClass.SliceIdList> getListSliceIdsMethod;
 
@@ -1192,6 +1316,37 @@ public final class ContextServiceGrpc {
     return getGetSliceEventsMethod;
   }
 
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.SliceFilter,
+      context.ContextOuterClass.SliceList> getSelectSliceMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "SelectSlice",
+      requestType = context.ContextOuterClass.SliceFilter.class,
+      responseType = context.ContextOuterClass.SliceList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.SliceFilter,
+      context.ContextOuterClass.SliceList> getSelectSliceMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.SliceFilter, context.ContextOuterClass.SliceList> getSelectSliceMethod;
+    if ((getSelectSliceMethod = ContextServiceGrpc.getSelectSliceMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getSelectSliceMethod = ContextServiceGrpc.getSelectSliceMethod) == null) {
+          ContextServiceGrpc.getSelectSliceMethod = getSelectSliceMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.SliceFilter, context.ContextOuterClass.SliceList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SelectSlice"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.SliceFilter.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.SliceList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("SelectSlice"))
+              .build();
+        }
+      }
+    }
+    return getSelectSliceMethod;
+  }
+
   private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceId,
       context.ContextOuterClass.ConnectionIdList> getListConnectionIdsMethod;
 
@@ -1489,6 +1644,13 @@ public final class ContextServiceGrpc {
       io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetTopologyMethod(), responseObserver);
     }
 
+    /**
+     */
+    public void getTopologyDetails(context.ContextOuterClass.TopologyId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyDetails> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetTopologyDetailsMethod(), responseObserver);
+    }
+
     /**
      */
     public void setTopology(context.ContextOuterClass.Topology request,
@@ -1552,6 +1714,20 @@ public final class ContextServiceGrpc {
       io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetDeviceEventsMethod(), responseObserver);
     }
 
+    /**
+     */
+    public void selectDevice(context.ContextOuterClass.DeviceFilter request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSelectDeviceMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void listEndPointNames(context.ContextOuterClass.EndPointIdList request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.EndPointNameList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListEndPointNamesMethod(), responseObserver);
+    }
+
     /**
      */
     public void listLinkIds(context.ContextOuterClass.Empty request,
@@ -1643,6 +1819,13 @@ public final class ContextServiceGrpc {
       io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetServiceEventsMethod(), responseObserver);
     }
 
+    /**
+     */
+    public void selectService(context.ContextOuterClass.ServiceFilter request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSelectServiceMethod(), responseObserver);
+    }
+
     /**
      */
     public void listSliceIds(context.ContextOuterClass.ContextId request,
@@ -1692,6 +1875,13 @@ public final class ContextServiceGrpc {
       io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetSliceEventsMethod(), responseObserver);
     }
 
+    /**
+     */
+    public void selectSlice(context.ContextOuterClass.SliceFilter request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.SliceList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSelectSliceMethod(), responseObserver);
+    }
+
     /**
      */
     public void listConnectionIds(context.ContextOuterClass.ServiceId request,
@@ -1799,6 +1989,13 @@ public final class ContextServiceGrpc {
                 context.ContextOuterClass.TopologyId,
                 context.ContextOuterClass.Topology>(
                   this, METHODID_GET_TOPOLOGY)))
+          .addMethod(
+            getGetTopologyDetailsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.TopologyId,
+                context.ContextOuterClass.TopologyDetails>(
+                  this, METHODID_GET_TOPOLOGY_DETAILS)))
           .addMethod(
             getSetTopologyMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
@@ -1862,6 +2059,20 @@ public final class ContextServiceGrpc {
                 context.ContextOuterClass.Empty,
                 context.ContextOuterClass.DeviceEvent>(
                   this, METHODID_GET_DEVICE_EVENTS)))
+          .addMethod(
+            getSelectDeviceMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.DeviceFilter,
+                context.ContextOuterClass.DeviceList>(
+                  this, METHODID_SELECT_DEVICE)))
+          .addMethod(
+            getListEndPointNamesMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.EndPointIdList,
+                context.ContextOuterClass.EndPointNameList>(
+                  this, METHODID_LIST_END_POINT_NAMES)))
           .addMethod(
             getListLinkIdsMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
@@ -1953,6 +2164,13 @@ public final class ContextServiceGrpc {
                 context.ContextOuterClass.Empty,
                 context.ContextOuterClass.ServiceEvent>(
                   this, METHODID_GET_SERVICE_EVENTS)))
+          .addMethod(
+            getSelectServiceMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.ServiceFilter,
+                context.ContextOuterClass.ServiceList>(
+                  this, METHODID_SELECT_SERVICE)))
           .addMethod(
             getListSliceIdsMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
@@ -2002,6 +2220,13 @@ public final class ContextServiceGrpc {
                 context.ContextOuterClass.Empty,
                 context.ContextOuterClass.SliceEvent>(
                   this, METHODID_GET_SLICE_EVENTS)))
+          .addMethod(
+            getSelectSliceMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.SliceFilter,
+                context.ContextOuterClass.SliceList>(
+                  this, METHODID_SELECT_SLICE)))
           .addMethod(
             getListConnectionIdsMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
@@ -2134,6 +2359,14 @@ public final class ContextServiceGrpc {
           getChannel().newCall(getGetTopologyMethod(), getCallOptions()), request, responseObserver);
     }
 
+    /**
+     */
+    public void getTopologyDetails(context.ContextOuterClass.TopologyId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyDetails> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetTopologyDetailsMethod(), getCallOptions()), request, responseObserver);
+    }
+
     /**
      */
     public void setTopology(context.ContextOuterClass.Topology request,
@@ -2206,6 +2439,22 @@ public final class ContextServiceGrpc {
           getChannel().newCall(getGetDeviceEventsMethod(), getCallOptions()), request, responseObserver);
     }
 
+    /**
+     */
+    public void selectDevice(context.ContextOuterClass.DeviceFilter request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getSelectDeviceMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void listEndPointNames(context.ContextOuterClass.EndPointIdList request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.EndPointNameList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListEndPointNamesMethod(), getCallOptions()), request, responseObserver);
+    }
+
     /**
      */
     public void listLinkIds(context.ContextOuterClass.Empty request,
@@ -2310,6 +2559,14 @@ public final class ContextServiceGrpc {
           getChannel().newCall(getGetServiceEventsMethod(), getCallOptions()), request, responseObserver);
     }
 
+    /**
+     */
+    public void selectService(context.ContextOuterClass.ServiceFilter request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getSelectServiceMethod(), getCallOptions()), request, responseObserver);
+    }
+
     /**
      */
     public void listSliceIds(context.ContextOuterClass.ContextId request,
@@ -2366,6 +2623,14 @@ public final class ContextServiceGrpc {
           getChannel().newCall(getGetSliceEventsMethod(), getCallOptions()), request, responseObserver);
     }
 
+    /**
+     */
+    public void selectSlice(context.ContextOuterClass.SliceFilter request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.SliceList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getSelectSliceMethod(), getCallOptions()), request, responseObserver);
+    }
+
     /**
      */
     public void listConnectionIds(context.ContextOuterClass.ServiceId request,
@@ -2493,6 +2758,13 @@ public final class ContextServiceGrpc {
           getChannel(), getGetTopologyMethod(), getCallOptions(), request);
     }
 
+    /**
+     */
+    public context.ContextOuterClass.TopologyDetails getTopologyDetails(context.ContextOuterClass.TopologyId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetTopologyDetailsMethod(), getCallOptions(), request);
+    }
+
     /**
      */
     public context.ContextOuterClass.TopologyId setTopology(context.ContextOuterClass.Topology request) {
@@ -2558,6 +2830,20 @@ public final class ContextServiceGrpc {
           getChannel(), getGetDeviceEventsMethod(), getCallOptions(), request);
     }
 
+    /**
+     */
+    public context.ContextOuterClass.DeviceList selectDevice(context.ContextOuterClass.DeviceFilter request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getSelectDeviceMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.EndPointNameList listEndPointNames(context.ContextOuterClass.EndPointIdList request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListEndPointNamesMethod(), getCallOptions(), request);
+    }
+
     /**
      */
     public context.ContextOuterClass.LinkIdList listLinkIds(context.ContextOuterClass.Empty request) {
@@ -2651,6 +2937,13 @@ public final class ContextServiceGrpc {
           getChannel(), getGetServiceEventsMethod(), getCallOptions(), request);
     }
 
+    /**
+     */
+    public context.ContextOuterClass.ServiceList selectService(context.ContextOuterClass.ServiceFilter request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getSelectServiceMethod(), getCallOptions(), request);
+    }
+
     /**
      */
     public context.ContextOuterClass.SliceIdList listSliceIds(context.ContextOuterClass.ContextId request) {
@@ -2701,6 +2994,13 @@ public final class ContextServiceGrpc {
           getChannel(), getGetSliceEventsMethod(), getCallOptions(), request);
     }
 
+    /**
+     */
+    public context.ContextOuterClass.SliceList selectSlice(context.ContextOuterClass.SliceFilter request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getSelectSliceMethod(), getCallOptions(), request);
+    }
+
     /**
      */
     public context.ContextOuterClass.ConnectionIdList listConnectionIds(context.ContextOuterClass.ServiceId request) {
@@ -2823,6 +3123,14 @@ public final class ContextServiceGrpc {
           getChannel().newCall(getGetTopologyMethod(), getCallOptions()), request);
     }
 
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.TopologyDetails> getTopologyDetails(
+        context.ContextOuterClass.TopologyId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetTopologyDetailsMethod(), getCallOptions()), request);
+    }
+
     /**
      */
     public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.TopologyId> setTopology(
@@ -2879,6 +3187,22 @@ public final class ContextServiceGrpc {
           getChannel().newCall(getRemoveDeviceMethod(), getCallOptions()), request);
     }
 
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.DeviceList> selectDevice(
+        context.ContextOuterClass.DeviceFilter request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getSelectDeviceMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.EndPointNameList> listEndPointNames(
+        context.ContextOuterClass.EndPointIdList request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListEndPointNamesMethod(), getCallOptions()), request);
+    }
+
     /**
      */
     public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.LinkIdList> listLinkIds(
@@ -2967,6 +3291,14 @@ public final class ContextServiceGrpc {
           getChannel().newCall(getRemoveServiceMethod(), getCallOptions()), request);
     }
 
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.ServiceList> selectService(
+        context.ContextOuterClass.ServiceFilter request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getSelectServiceMethod(), getCallOptions()), request);
+    }
+
     /**
      */
     public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.SliceIdList> listSliceIds(
@@ -3015,6 +3347,14 @@ public final class ContextServiceGrpc {
           getChannel().newCall(getRemoveSliceMethod(), getCallOptions()), request);
     }
 
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.SliceList> selectSlice(
+        context.ContextOuterClass.SliceFilter request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getSelectSliceMethod(), getCallOptions()), request);
+    }
+
     /**
      */
     public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.ConnectionIdList> listConnectionIds(
@@ -3065,41 +3405,46 @@ public final class ContextServiceGrpc {
   private static final int METHODID_LIST_TOPOLOGY_IDS = 6;
   private static final int METHODID_LIST_TOPOLOGIES = 7;
   private static final int METHODID_GET_TOPOLOGY = 8;
-  private static final int METHODID_SET_TOPOLOGY = 9;
-  private static final int METHODID_REMOVE_TOPOLOGY = 10;
-  private static final int METHODID_GET_TOPOLOGY_EVENTS = 11;
-  private static final int METHODID_LIST_DEVICE_IDS = 12;
-  private static final int METHODID_LIST_DEVICES = 13;
-  private static final int METHODID_GET_DEVICE = 14;
-  private static final int METHODID_SET_DEVICE = 15;
-  private static final int METHODID_REMOVE_DEVICE = 16;
-  private static final int METHODID_GET_DEVICE_EVENTS = 17;
-  private static final int METHODID_LIST_LINK_IDS = 18;
-  private static final int METHODID_LIST_LINKS = 19;
-  private static final int METHODID_GET_LINK = 20;
-  private static final int METHODID_SET_LINK = 21;
-  private static final int METHODID_REMOVE_LINK = 22;
-  private static final int METHODID_GET_LINK_EVENTS = 23;
-  private static final int METHODID_LIST_SERVICE_IDS = 24;
-  private static final int METHODID_LIST_SERVICES = 25;
-  private static final int METHODID_GET_SERVICE = 26;
-  private static final int METHODID_SET_SERVICE = 27;
-  private static final int METHODID_UNSET_SERVICE = 28;
-  private static final int METHODID_REMOVE_SERVICE = 29;
-  private static final int METHODID_GET_SERVICE_EVENTS = 30;
-  private static final int METHODID_LIST_SLICE_IDS = 31;
-  private static final int METHODID_LIST_SLICES = 32;
-  private static final int METHODID_GET_SLICE = 33;
-  private static final int METHODID_SET_SLICE = 34;
-  private static final int METHODID_UNSET_SLICE = 35;
-  private static final int METHODID_REMOVE_SLICE = 36;
-  private static final int METHODID_GET_SLICE_EVENTS = 37;
-  private static final int METHODID_LIST_CONNECTION_IDS = 38;
-  private static final int METHODID_LIST_CONNECTIONS = 39;
-  private static final int METHODID_GET_CONNECTION = 40;
-  private static final int METHODID_SET_CONNECTION = 41;
-  private static final int METHODID_REMOVE_CONNECTION = 42;
-  private static final int METHODID_GET_CONNECTION_EVENTS = 43;
+  private static final int METHODID_GET_TOPOLOGY_DETAILS = 9;
+  private static final int METHODID_SET_TOPOLOGY = 10;
+  private static final int METHODID_REMOVE_TOPOLOGY = 11;
+  private static final int METHODID_GET_TOPOLOGY_EVENTS = 12;
+  private static final int METHODID_LIST_DEVICE_IDS = 13;
+  private static final int METHODID_LIST_DEVICES = 14;
+  private static final int METHODID_GET_DEVICE = 15;
+  private static final int METHODID_SET_DEVICE = 16;
+  private static final int METHODID_REMOVE_DEVICE = 17;
+  private static final int METHODID_GET_DEVICE_EVENTS = 18;
+  private static final int METHODID_SELECT_DEVICE = 19;
+  private static final int METHODID_LIST_END_POINT_NAMES = 20;
+  private static final int METHODID_LIST_LINK_IDS = 21;
+  private static final int METHODID_LIST_LINKS = 22;
+  private static final int METHODID_GET_LINK = 23;
+  private static final int METHODID_SET_LINK = 24;
+  private static final int METHODID_REMOVE_LINK = 25;
+  private static final int METHODID_GET_LINK_EVENTS = 26;
+  private static final int METHODID_LIST_SERVICE_IDS = 27;
+  private static final int METHODID_LIST_SERVICES = 28;
+  private static final int METHODID_GET_SERVICE = 29;
+  private static final int METHODID_SET_SERVICE = 30;
+  private static final int METHODID_UNSET_SERVICE = 31;
+  private static final int METHODID_REMOVE_SERVICE = 32;
+  private static final int METHODID_GET_SERVICE_EVENTS = 33;
+  private static final int METHODID_SELECT_SERVICE = 34;
+  private static final int METHODID_LIST_SLICE_IDS = 35;
+  private static final int METHODID_LIST_SLICES = 36;
+  private static final int METHODID_GET_SLICE = 37;
+  private static final int METHODID_SET_SLICE = 38;
+  private static final int METHODID_UNSET_SLICE = 39;
+  private static final int METHODID_REMOVE_SLICE = 40;
+  private static final int METHODID_GET_SLICE_EVENTS = 41;
+  private static final int METHODID_SELECT_SLICE = 42;
+  private static final int METHODID_LIST_CONNECTION_IDS = 43;
+  private static final int METHODID_LIST_CONNECTIONS = 44;
+  private static final int METHODID_GET_CONNECTION = 45;
+  private static final int METHODID_SET_CONNECTION = 46;
+  private static final int METHODID_REMOVE_CONNECTION = 47;
+  private static final int METHODID_GET_CONNECTION_EVENTS = 48;
 
   private static final class MethodHandlers<Req, Resp> implements
       io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
@@ -3154,6 +3499,10 @@ public final class ContextServiceGrpc {
           serviceImpl.getTopology((context.ContextOuterClass.TopologyId) request,
               (io.grpc.stub.StreamObserver<context.ContextOuterClass.Topology>) responseObserver);
           break;
+        case METHODID_GET_TOPOLOGY_DETAILS:
+          serviceImpl.getTopologyDetails((context.ContextOuterClass.TopologyId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyDetails>) responseObserver);
+          break;
         case METHODID_SET_TOPOLOGY:
           serviceImpl.setTopology((context.ContextOuterClass.Topology) request,
               (io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyId>) responseObserver);
@@ -3190,6 +3539,14 @@ public final class ContextServiceGrpc {
           serviceImpl.getDeviceEvents((context.ContextOuterClass.Empty) request,
               (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceEvent>) responseObserver);
           break;
+        case METHODID_SELECT_DEVICE:
+          serviceImpl.selectDevice((context.ContextOuterClass.DeviceFilter) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceList>) responseObserver);
+          break;
+        case METHODID_LIST_END_POINT_NAMES:
+          serviceImpl.listEndPointNames((context.ContextOuterClass.EndPointIdList) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.EndPointNameList>) responseObserver);
+          break;
         case METHODID_LIST_LINK_IDS:
           serviceImpl.listLinkIds((context.ContextOuterClass.Empty) request,
               (io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkIdList>) responseObserver);
@@ -3242,6 +3599,10 @@ public final class ContextServiceGrpc {
           serviceImpl.getServiceEvents((context.ContextOuterClass.Empty) request,
               (io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceEvent>) responseObserver);
           break;
+        case METHODID_SELECT_SERVICE:
+          serviceImpl.selectService((context.ContextOuterClass.ServiceFilter) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceList>) responseObserver);
+          break;
         case METHODID_LIST_SLICE_IDS:
           serviceImpl.listSliceIds((context.ContextOuterClass.ContextId) request,
               (io.grpc.stub.StreamObserver<context.ContextOuterClass.SliceIdList>) responseObserver);
@@ -3270,6 +3631,10 @@ public final class ContextServiceGrpc {
           serviceImpl.getSliceEvents((context.ContextOuterClass.Empty) request,
               (io.grpc.stub.StreamObserver<context.ContextOuterClass.SliceEvent>) responseObserver);
           break;
+        case METHODID_SELECT_SLICE:
+          serviceImpl.selectSlice((context.ContextOuterClass.SliceFilter) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.SliceList>) responseObserver);
+          break;
         case METHODID_LIST_CONNECTION_IDS:
           serviceImpl.listConnectionIds((context.ContextOuterClass.ServiceId) request,
               (io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionIdList>) responseObserver);
@@ -3364,6 +3729,7 @@ public final class ContextServiceGrpc {
               .addMethod(getListTopologyIdsMethod())
               .addMethod(getListTopologiesMethod())
               .addMethod(getGetTopologyMethod())
+              .addMethod(getGetTopologyDetailsMethod())
               .addMethod(getSetTopologyMethod())
               .addMethod(getRemoveTopologyMethod())
               .addMethod(getGetTopologyEventsMethod())
@@ -3373,6 +3739,8 @@ public final class ContextServiceGrpc {
               .addMethod(getSetDeviceMethod())
               .addMethod(getRemoveDeviceMethod())
               .addMethod(getGetDeviceEventsMethod())
+              .addMethod(getSelectDeviceMethod())
+              .addMethod(getListEndPointNamesMethod())
               .addMethod(getListLinkIdsMethod())
               .addMethod(getListLinksMethod())
               .addMethod(getGetLinkMethod())
@@ -3386,6 +3754,7 @@ public final class ContextServiceGrpc {
               .addMethod(getUnsetServiceMethod())
               .addMethod(getRemoveServiceMethod())
               .addMethod(getGetServiceEventsMethod())
+              .addMethod(getSelectServiceMethod())
               .addMethod(getListSliceIdsMethod())
               .addMethod(getListSlicesMethod())
               .addMethod(getGetSliceMethod())
@@ -3393,6 +3762,7 @@ public final class ContextServiceGrpc {
               .addMethod(getUnsetSliceMethod())
               .addMethod(getRemoveSliceMethod())
               .addMethod(getGetSliceEventsMethod())
+              .addMethod(getSelectSliceMethod())
               .addMethod(getListConnectionIdsMethod())
               .addMethod(getListConnectionsMethod())
               .addMethod(getGetConnectionMethod())
diff --git a/src/policy/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java b/src/policy/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java
index f7d2cb94e339366b54355c7e11b3ee72fa1e415c..45d853aa7771c71679f1b7a67051a478b3f73be8 100644
--- a/src/policy/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java
+++ b/src/policy/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java
@@ -76,6 +76,11 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M
         }
 
         
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyDetails> getTopologyDetails(context.ContextOuterClass.TopologyId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getTopologyDetails);
+        }
+
+        
         public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyId> setTopology(context.ContextOuterClass.Topology request) {
             return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::setTopology);
         }
@@ -111,6 +116,16 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M
         }
 
         
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceList> selectDevice(context.ContextOuterClass.DeviceFilter request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::selectDevice);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.EndPointNameList> listEndPointNames(context.ContextOuterClass.EndPointIdList request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listEndPointNames);
+        }
+
+        
         public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkIdList> listLinkIds(context.ContextOuterClass.Empty request) {
             return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listLinkIds);
         }
@@ -166,6 +181,11 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M
         }
 
         
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceList> selectService(context.ContextOuterClass.ServiceFilter request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::selectService);
+        }
+
+        
         public io.smallrye.mutiny.Uni<context.ContextOuterClass.SliceIdList> listSliceIds(context.ContextOuterClass.ContextId request) {
             return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listSliceIds);
         }
@@ -196,6 +216,11 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M
         }
 
         
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.SliceList> selectSlice(context.ContextOuterClass.SliceFilter request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::selectSlice);
+        }
+
+        
         public io.smallrye.mutiny.Uni<context.ContextOuterClass.ConnectionIdList> listConnectionIds(context.ContextOuterClass.ServiceId request) {
             return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listConnectionIds);
         }
@@ -313,6 +338,11 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M
         }
 
         
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyDetails> getTopologyDetails(context.ContextOuterClass.TopologyId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
         public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyId> setTopology(context.ContextOuterClass.Topology request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
@@ -348,6 +378,16 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M
         }
 
         
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceList> selectDevice(context.ContextOuterClass.DeviceFilter request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.EndPointNameList> listEndPointNames(context.ContextOuterClass.EndPointIdList request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
         public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkIdList> listLinkIds(context.ContextOuterClass.Empty request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
@@ -403,6 +443,11 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M
         }
 
         
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceList> selectService(context.ContextOuterClass.ServiceFilter request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
         public io.smallrye.mutiny.Uni<context.ContextOuterClass.SliceIdList> listSliceIds(context.ContextOuterClass.ContextId request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
@@ -433,6 +478,11 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M
         }
 
         
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.SliceList> selectSlice(context.ContextOuterClass.SliceFilter request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
         public io.smallrye.mutiny.Uni<context.ContextOuterClass.ConnectionIdList> listConnectionIds(context.ContextOuterClass.ServiceId request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
@@ -557,6 +607,13 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M
                                             context.ContextOuterClass.TopologyId,
                                             context.ContextOuterClass.Topology>(
                                             this, METHODID_GET_TOPOLOGY, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getGetTopologyDetailsMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.TopologyId,
+                                            context.ContextOuterClass.TopologyDetails>(
+                                            this, METHODID_GET_TOPOLOGY_DETAILS, compression)))
                     .addMethod(
                             context.ContextServiceGrpc.getSetTopologyMethod(),
                             asyncUnaryCall(
@@ -620,6 +677,20 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M
                                             context.ContextOuterClass.Empty,
                                             context.ContextOuterClass.DeviceEvent>(
                                             this, METHODID_GET_DEVICE_EVENTS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getSelectDeviceMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.DeviceFilter,
+                                            context.ContextOuterClass.DeviceList>(
+                                            this, METHODID_SELECT_DEVICE, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getListEndPointNamesMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.EndPointIdList,
+                                            context.ContextOuterClass.EndPointNameList>(
+                                            this, METHODID_LIST_END_POINT_NAMES, compression)))
                     .addMethod(
                             context.ContextServiceGrpc.getListLinkIdsMethod(),
                             asyncUnaryCall(
@@ -711,6 +782,13 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M
                                             context.ContextOuterClass.Empty,
                                             context.ContextOuterClass.ServiceEvent>(
                                             this, METHODID_GET_SERVICE_EVENTS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getSelectServiceMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.ServiceFilter,
+                                            context.ContextOuterClass.ServiceList>(
+                                            this, METHODID_SELECT_SERVICE, compression)))
                     .addMethod(
                             context.ContextServiceGrpc.getListSliceIdsMethod(),
                             asyncUnaryCall(
@@ -760,6 +838,13 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M
                                             context.ContextOuterClass.Empty,
                                             context.ContextOuterClass.SliceEvent>(
                                             this, METHODID_GET_SLICE_EVENTS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getSelectSliceMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.SliceFilter,
+                                            context.ContextOuterClass.SliceList>(
+                                            this, METHODID_SELECT_SLICE, compression)))
                     .addMethod(
                             context.ContextServiceGrpc.getListConnectionIdsMethod(),
                             asyncUnaryCall(
@@ -815,41 +900,46 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M
     private static final int METHODID_LIST_TOPOLOGY_IDS = 6;
     private static final int METHODID_LIST_TOPOLOGIES = 7;
     private static final int METHODID_GET_TOPOLOGY = 8;
-    private static final int METHODID_SET_TOPOLOGY = 9;
-    private static final int METHODID_REMOVE_TOPOLOGY = 10;
-    private static final int METHODID_GET_TOPOLOGY_EVENTS = 11;
-    private static final int METHODID_LIST_DEVICE_IDS = 12;
-    private static final int METHODID_LIST_DEVICES = 13;
-    private static final int METHODID_GET_DEVICE = 14;
-    private static final int METHODID_SET_DEVICE = 15;
-    private static final int METHODID_REMOVE_DEVICE = 16;
-    private static final int METHODID_GET_DEVICE_EVENTS = 17;
-    private static final int METHODID_LIST_LINK_IDS = 18;
-    private static final int METHODID_LIST_LINKS = 19;
-    private static final int METHODID_GET_LINK = 20;
-    private static final int METHODID_SET_LINK = 21;
-    private static final int METHODID_REMOVE_LINK = 22;
-    private static final int METHODID_GET_LINK_EVENTS = 23;
-    private static final int METHODID_LIST_SERVICE_IDS = 24;
-    private static final int METHODID_LIST_SERVICES = 25;
-    private static final int METHODID_GET_SERVICE = 26;
-    private static final int METHODID_SET_SERVICE = 27;
-    private static final int METHODID_UNSET_SERVICE = 28;
-    private static final int METHODID_REMOVE_SERVICE = 29;
-    private static final int METHODID_GET_SERVICE_EVENTS = 30;
-    private static final int METHODID_LIST_SLICE_IDS = 31;
-    private static final int METHODID_LIST_SLICES = 32;
-    private static final int METHODID_GET_SLICE = 33;
-    private static final int METHODID_SET_SLICE = 34;
-    private static final int METHODID_UNSET_SLICE = 35;
-    private static final int METHODID_REMOVE_SLICE = 36;
-    private static final int METHODID_GET_SLICE_EVENTS = 37;
-    private static final int METHODID_LIST_CONNECTION_IDS = 38;
-    private static final int METHODID_LIST_CONNECTIONS = 39;
-    private static final int METHODID_GET_CONNECTION = 40;
-    private static final int METHODID_SET_CONNECTION = 41;
-    private static final int METHODID_REMOVE_CONNECTION = 42;
-    private static final int METHODID_GET_CONNECTION_EVENTS = 43;
+    private static final int METHODID_GET_TOPOLOGY_DETAILS = 9;
+    private static final int METHODID_SET_TOPOLOGY = 10;
+    private static final int METHODID_REMOVE_TOPOLOGY = 11;
+    private static final int METHODID_GET_TOPOLOGY_EVENTS = 12;
+    private static final int METHODID_LIST_DEVICE_IDS = 13;
+    private static final int METHODID_LIST_DEVICES = 14;
+    private static final int METHODID_GET_DEVICE = 15;
+    private static final int METHODID_SET_DEVICE = 16;
+    private static final int METHODID_REMOVE_DEVICE = 17;
+    private static final int METHODID_GET_DEVICE_EVENTS = 18;
+    private static final int METHODID_SELECT_DEVICE = 19;
+    private static final int METHODID_LIST_END_POINT_NAMES = 20;
+    private static final int METHODID_LIST_LINK_IDS = 21;
+    private static final int METHODID_LIST_LINKS = 22;
+    private static final int METHODID_GET_LINK = 23;
+    private static final int METHODID_SET_LINK = 24;
+    private static final int METHODID_REMOVE_LINK = 25;
+    private static final int METHODID_GET_LINK_EVENTS = 26;
+    private static final int METHODID_LIST_SERVICE_IDS = 27;
+    private static final int METHODID_LIST_SERVICES = 28;
+    private static final int METHODID_GET_SERVICE = 29;
+    private static final int METHODID_SET_SERVICE = 30;
+    private static final int METHODID_UNSET_SERVICE = 31;
+    private static final int METHODID_REMOVE_SERVICE = 32;
+    private static final int METHODID_GET_SERVICE_EVENTS = 33;
+    private static final int METHODID_SELECT_SERVICE = 34;
+    private static final int METHODID_LIST_SLICE_IDS = 35;
+    private static final int METHODID_LIST_SLICES = 36;
+    private static final int METHODID_GET_SLICE = 37;
+    private static final int METHODID_SET_SLICE = 38;
+    private static final int METHODID_UNSET_SLICE = 39;
+    private static final int METHODID_REMOVE_SLICE = 40;
+    private static final int METHODID_GET_SLICE_EVENTS = 41;
+    private static final int METHODID_SELECT_SLICE = 42;
+    private static final int METHODID_LIST_CONNECTION_IDS = 43;
+    private static final int METHODID_LIST_CONNECTIONS = 44;
+    private static final int METHODID_GET_CONNECTION = 45;
+    private static final int METHODID_SET_CONNECTION = 46;
+    private static final int METHODID_REMOVE_CONNECTION = 47;
+    private static final int METHODID_GET_CONNECTION_EVENTS = 48;
 
     private static final class MethodHandlers<Req, Resp> implements
             io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
@@ -924,6 +1014,12 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M
                             compression,
                             serviceImpl::getTopology);
                     break;
+                case METHODID_GET_TOPOLOGY_DETAILS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.TopologyId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyDetails>) responseObserver,
+                            compression,
+                            serviceImpl::getTopologyDetails);
+                    break;
                 case METHODID_SET_TOPOLOGY:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Topology) request,
                             (io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyId>) responseObserver,
@@ -978,6 +1074,18 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M
                             compression,
                             serviceImpl::getDeviceEvents);
                     break;
+                case METHODID_SELECT_DEVICE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.DeviceFilter) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceList>) responseObserver,
+                            compression,
+                            serviceImpl::selectDevice);
+                    break;
+                case METHODID_LIST_END_POINT_NAMES:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.EndPointIdList) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.EndPointNameList>) responseObserver,
+                            compression,
+                            serviceImpl::listEndPointNames);
+                    break;
                 case METHODID_LIST_LINK_IDS:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
                             (io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkIdList>) responseObserver,
@@ -1056,6 +1164,12 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M
                             compression,
                             serviceImpl::getServiceEvents);
                     break;
+                case METHODID_SELECT_SERVICE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ServiceFilter) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceList>) responseObserver,
+                            compression,
+                            serviceImpl::selectService);
+                    break;
                 case METHODID_LIST_SLICE_IDS:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ContextId) request,
                             (io.grpc.stub.StreamObserver<context.ContextOuterClass.SliceIdList>) responseObserver,
@@ -1098,6 +1212,12 @@ public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.M
                             compression,
                             serviceImpl::getSliceEvents);
                     break;
+                case METHODID_SELECT_SLICE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.SliceFilter) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.SliceList>) responseObserver,
+                            compression,
+                            serviceImpl::selectSlice);
+                    break;
                 case METHODID_LIST_CONNECTION_IDS:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ServiceId) request,
                             (io.grpc.stub.StreamObserver<context.ContextOuterClass.ConnectionIdList>) responseObserver,
diff --git a/src/policy/target/generated-sources/grpc/kpi_sample_types/KpiSampleTypes.java b/src/policy/target/generated-sources/grpc/kpi_sample_types/KpiSampleTypes.java
index 67e1ec736f9d83cbf95b419e9e61e92e82e73b88..217672b2e8de2d7c840833a937b0fb04c38a221b 100644
--- a/src/policy/target/generated-sources/grpc/kpi_sample_types/KpiSampleTypes.java
+++ b/src/policy/target/generated-sources/grpc/kpi_sample_types/KpiSampleTypes.java
@@ -31,6 +31,10 @@ public final class KpiSampleTypes {
      * <code>KPISAMPLETYPE_PACKETS_RECEIVED = 102;</code>
      */
     KPISAMPLETYPE_PACKETS_RECEIVED(102),
+    /**
+     * <code>KPISAMPLETYPE_PACKETS_DROPPED = 103;</code>
+     */
+    KPISAMPLETYPE_PACKETS_DROPPED(103),
     /**
      * <code>KPISAMPLETYPE_BYTES_TRANSMITTED = 201;</code>
      */
@@ -39,6 +43,50 @@ public final class KpiSampleTypes {
      * <code>KPISAMPLETYPE_BYTES_RECEIVED = 202;</code>
      */
     KPISAMPLETYPE_BYTES_RECEIVED(202),
+    /**
+     * <code>KPISAMPLETYPE_BYTES_DROPPED = 203;</code>
+     */
+    KPISAMPLETYPE_BYTES_DROPPED(203),
+    /**
+     * <pre>
+     *. can be used by both optical and L3 without any issue
+     * </pre>
+     *
+     * <code>KPISAMPLETYPE_ML_CONFIDENCE = 401;</code>
+     */
+    KPISAMPLETYPE_ML_CONFIDENCE(401),
+    /**
+     * <pre>
+     *. can be used by both optical and L3 without any issue
+     * </pre>
+     *
+     * <code>KPISAMPLETYPE_OPTICAL_SECURITY_STATUS = 501;</code>
+     */
+    KPISAMPLETYPE_OPTICAL_SECURITY_STATUS(501),
+    /**
+     * <code>KPISAMPLETYPE_L3_UNIQUE_ATTACK_CONNS = 601;</code>
+     */
+    KPISAMPLETYPE_L3_UNIQUE_ATTACK_CONNS(601),
+    /**
+     * <code>KPISAMPLETYPE_L3_TOTAL_DROPPED_PACKTS = 602;</code>
+     */
+    KPISAMPLETYPE_L3_TOTAL_DROPPED_PACKTS(602),
+    /**
+     * <code>KPISAMPLETYPE_L3_UNIQUE_ATTACKERS = 603;</code>
+     */
+    KPISAMPLETYPE_L3_UNIQUE_ATTACKERS(603),
+    /**
+     * <code>KPISAMPLETYPE_L3_UNIQUE_COMPROMISED_CLIENTS = 604;</code>
+     */
+    KPISAMPLETYPE_L3_UNIQUE_COMPROMISED_CLIENTS(604),
+    /**
+     * <code>KPISAMPLETYPE_L3_SECURITY_STATUS_CRYPTO = 605;</code>
+     */
+    KPISAMPLETYPE_L3_SECURITY_STATUS_CRYPTO(605),
+    /**
+     * <code>KPISAMPLETYPE_SERVICE_LATENCY_MS = 701;</code>
+     */
+    KPISAMPLETYPE_SERVICE_LATENCY_MS(701),
     UNRECOGNIZED(-1),
     ;
 
@@ -54,6 +102,10 @@ public final class KpiSampleTypes {
      * <code>KPISAMPLETYPE_PACKETS_RECEIVED = 102;</code>
      */
     public static final int KPISAMPLETYPE_PACKETS_RECEIVED_VALUE = 102;
+    /**
+     * <code>KPISAMPLETYPE_PACKETS_DROPPED = 103;</code>
+     */
+    public static final int KPISAMPLETYPE_PACKETS_DROPPED_VALUE = 103;
     /**
      * <code>KPISAMPLETYPE_BYTES_TRANSMITTED = 201;</code>
      */
@@ -62,6 +114,50 @@ public final class KpiSampleTypes {
      * <code>KPISAMPLETYPE_BYTES_RECEIVED = 202;</code>
      */
     public static final int KPISAMPLETYPE_BYTES_RECEIVED_VALUE = 202;
+    /**
+     * <code>KPISAMPLETYPE_BYTES_DROPPED = 203;</code>
+     */
+    public static final int KPISAMPLETYPE_BYTES_DROPPED_VALUE = 203;
+    /**
+     * <pre>
+     *. can be used by both optical and L3 without any issue
+     * </pre>
+     *
+     * <code>KPISAMPLETYPE_ML_CONFIDENCE = 401;</code>
+     */
+    public static final int KPISAMPLETYPE_ML_CONFIDENCE_VALUE = 401;
+    /**
+     * <pre>
+     *. can be used by both optical and L3 without any issue
+     * </pre>
+     *
+     * <code>KPISAMPLETYPE_OPTICAL_SECURITY_STATUS = 501;</code>
+     */
+    public static final int KPISAMPLETYPE_OPTICAL_SECURITY_STATUS_VALUE = 501;
+    /**
+     * <code>KPISAMPLETYPE_L3_UNIQUE_ATTACK_CONNS = 601;</code>
+     */
+    public static final int KPISAMPLETYPE_L3_UNIQUE_ATTACK_CONNS_VALUE = 601;
+    /**
+     * <code>KPISAMPLETYPE_L3_TOTAL_DROPPED_PACKTS = 602;</code>
+     */
+    public static final int KPISAMPLETYPE_L3_TOTAL_DROPPED_PACKTS_VALUE = 602;
+    /**
+     * <code>KPISAMPLETYPE_L3_UNIQUE_ATTACKERS = 603;</code>
+     */
+    public static final int KPISAMPLETYPE_L3_UNIQUE_ATTACKERS_VALUE = 603;
+    /**
+     * <code>KPISAMPLETYPE_L3_UNIQUE_COMPROMISED_CLIENTS = 604;</code>
+     */
+    public static final int KPISAMPLETYPE_L3_UNIQUE_COMPROMISED_CLIENTS_VALUE = 604;
+    /**
+     * <code>KPISAMPLETYPE_L3_SECURITY_STATUS_CRYPTO = 605;</code>
+     */
+    public static final int KPISAMPLETYPE_L3_SECURITY_STATUS_CRYPTO_VALUE = 605;
+    /**
+     * <code>KPISAMPLETYPE_SERVICE_LATENCY_MS = 701;</code>
+     */
+    public static final int KPISAMPLETYPE_SERVICE_LATENCY_MS_VALUE = 701;
 
 
     public final int getNumber() {
@@ -91,8 +187,18 @@ public final class KpiSampleTypes {
         case 0: return KPISAMPLETYPE_UNKNOWN;
         case 101: return KPISAMPLETYPE_PACKETS_TRANSMITTED;
         case 102: return KPISAMPLETYPE_PACKETS_RECEIVED;
+        case 103: return KPISAMPLETYPE_PACKETS_DROPPED;
         case 201: return KPISAMPLETYPE_BYTES_TRANSMITTED;
         case 202: return KPISAMPLETYPE_BYTES_RECEIVED;
+        case 203: return KPISAMPLETYPE_BYTES_DROPPED;
+        case 401: return KPISAMPLETYPE_ML_CONFIDENCE;
+        case 501: return KPISAMPLETYPE_OPTICAL_SECURITY_STATUS;
+        case 601: return KPISAMPLETYPE_L3_UNIQUE_ATTACK_CONNS;
+        case 602: return KPISAMPLETYPE_L3_TOTAL_DROPPED_PACKTS;
+        case 603: return KPISAMPLETYPE_L3_UNIQUE_ATTACKERS;
+        case 604: return KPISAMPLETYPE_L3_UNIQUE_COMPROMISED_CLIENTS;
+        case 605: return KPISAMPLETYPE_L3_SECURITY_STATUS_CRYPTO;
+        case 701: return KPISAMPLETYPE_SERVICE_LATENCY_MS;
         default: return null;
       }
     }
@@ -159,12 +265,22 @@ public final class KpiSampleTypes {
   static {
     java.lang.String[] descriptorData = {
       "\n\026kpi_sample_types.proto\022\020kpi_sample_typ" +
-      "es*\276\001\n\rKpiSampleType\022\031\n\025KPISAMPLETYPE_UN" +
+      "es*\327\004\n\rKpiSampleType\022\031\n\025KPISAMPLETYPE_UN" +
       "KNOWN\020\000\022%\n!KPISAMPLETYPE_PACKETS_TRANSMI" +
       "TTED\020e\022\"\n\036KPISAMPLETYPE_PACKETS_RECEIVED" +
-      "\020f\022$\n\037KPISAMPLETYPE_BYTES_TRANSMITTED\020\311\001" +
-      "\022!\n\034KPISAMPLETYPE_BYTES_RECEIVED\020\312\001b\006pro" +
-      "to3"
+      "\020f\022!\n\035KPISAMPLETYPE_PACKETS_DROPPED\020g\022$\n" +
+      "\037KPISAMPLETYPE_BYTES_TRANSMITTED\020\311\001\022!\n\034K" +
+      "PISAMPLETYPE_BYTES_RECEIVED\020\312\001\022 \n\033KPISAM" +
+      "PLETYPE_BYTES_DROPPED\020\313\001\022 \n\033KPISAMPLETYP" +
+      "E_ML_CONFIDENCE\020\221\003\022*\n%KPISAMPLETYPE_OPTI" +
+      "CAL_SECURITY_STATUS\020\365\003\022)\n$KPISAMPLETYPE_" +
+      "L3_UNIQUE_ATTACK_CONNS\020\331\004\022*\n%KPISAMPLETY" +
+      "PE_L3_TOTAL_DROPPED_PACKTS\020\332\004\022&\n!KPISAMP" +
+      "LETYPE_L3_UNIQUE_ATTACKERS\020\333\004\0220\n+KPISAMP" +
+      "LETYPE_L3_UNIQUE_COMPROMISED_CLIENTS\020\334\004\022" +
+      ",\n\'KPISAMPLETYPE_L3_SECURITY_STATUS_CRYP" +
+      "TO\020\335\004\022%\n KPISAMPLETYPE_SERVICE_LATENCY_M" +
+      "S\020\275\005b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
diff --git a/src/policy/target/generated-sources/grpc/monitoring/Monitoring.java b/src/policy/target/generated-sources/grpc/monitoring/Monitoring.java
index ffd0ed3d839d951c755153b6f5beaf4b1a12cd2e..38f026eb1ac730e8f825e460916dc57469f0d312 100644
--- a/src/policy/target/generated-sources/grpc/monitoring/Monitoring.java
+++ b/src/policy/target/generated-sources/grpc/monitoring/Monitoring.java
@@ -139,6 +139,21 @@ public final class Monitoring {
      * <code>.context.SliceId slice_id = 8;</code>
      */
     context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
+
+    /**
+     * <code>.context.ConnectionId connection_id = 9;</code>
+     * @return Whether the connectionId field is set.
+     */
+    boolean hasConnectionId();
+    /**
+     * <code>.context.ConnectionId connection_id = 9;</code>
+     * @return The connectionId.
+     */
+    context.ContextOuterClass.ConnectionId getConnectionId();
+    /**
+     * <code>.context.ConnectionId connection_id = 9;</code>
+     */
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
   }
   /**
    * Protobuf type {@code monitoring.KpiDescriptor}
@@ -275,6 +290,19 @@ public final class Monitoring {
 
               break;
             }
+            case 74: {
+              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
+              if (connectionId_ != null) {
+                subBuilder = connectionId_.toBuilder();
+              }
+              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(connectionId_);
+                connectionId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -537,6 +565,32 @@ public final class Monitoring {
       return getSliceId();
     }
 
+    public static final int CONNECTION_ID_FIELD_NUMBER = 9;
+    private context.ContextOuterClass.ConnectionId connectionId_;
+    /**
+     * <code>.context.ConnectionId connection_id = 9;</code>
+     * @return Whether the connectionId field is set.
+     */
+    @java.lang.Override
+    public boolean hasConnectionId() {
+      return connectionId_ != null;
+    }
+    /**
+     * <code>.context.ConnectionId connection_id = 9;</code>
+     * @return The connectionId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionId getConnectionId() {
+      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+    }
+    /**
+     * <code>.context.ConnectionId connection_id = 9;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+      return getConnectionId();
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -575,6 +629,9 @@ public final class Monitoring {
       if (sliceId_ != null) {
         output.writeMessage(8, getSliceId());
       }
+      if (connectionId_ != null) {
+        output.writeMessage(9, getConnectionId());
+      }
       unknownFields.writeTo(output);
     }
 
@@ -615,6 +672,10 @@ public final class Monitoring {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(8, getSliceId());
       }
+      if (connectionId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(9, getConnectionId());
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -660,6 +721,11 @@ public final class Monitoring {
         if (!getSliceId()
             .equals(other.getSliceId())) return false;
       }
+      if (hasConnectionId() != other.hasConnectionId()) return false;
+      if (hasConnectionId()) {
+        if (!getConnectionId()
+            .equals(other.getConnectionId())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -699,6 +765,10 @@ public final class Monitoring {
         hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
         hash = (53 * hash) + getSliceId().hashCode();
       }
+      if (hasConnectionId()) {
+        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionId().hashCode();
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -873,6 +943,12 @@ public final class Monitoring {
           sliceId_ = null;
           sliceIdBuilder_ = null;
         }
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+        } else {
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
+        }
         return this;
       }
 
@@ -936,6 +1012,11 @@ public final class Monitoring {
         } else {
           result.sliceId_ = sliceIdBuilder_.build();
         }
+        if (connectionIdBuilder_ == null) {
+          result.connectionId_ = connectionId_;
+        } else {
+          result.connectionId_ = connectionIdBuilder_.build();
+        }
         onBuilt();
         return result;
       }
@@ -1032,6 +1113,9 @@ public final class Monitoring {
         if (other.hasSliceId()) {
           mergeSliceId(other.getSliceId());
         }
+        if (other.hasConnectionId()) {
+          mergeConnectionId(other.getConnectionId());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -2026,6 +2110,125 @@ public final class Monitoring {
         }
         return sliceIdBuilder_;
       }
+
+      private context.ContextOuterClass.ConnectionId connectionId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
+      /**
+       * <code>.context.ConnectionId connection_id = 9;</code>
+       * @return Whether the connectionId field is set.
+       */
+      public boolean hasConnectionId() {
+        return connectionIdBuilder_ != null || connectionId_ != null;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 9;</code>
+       * @return The connectionId.
+       */
+      public context.ContextOuterClass.ConnectionId getConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+        } else {
+          return connectionIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 9;</code>
+       */
+      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          connectionId_ = value;
+          onChanged();
+        } else {
+          connectionIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 9;</code>
+       */
+      public Builder setConnectionId(
+          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = builderForValue.build();
+          onChanged();
+        } else {
+          connectionIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 9;</code>
+       */
+      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (connectionId_ != null) {
+            connectionId_ =
+              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
+          } else {
+            connectionId_ = value;
+          }
+          onChanged();
+        } else {
+          connectionIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 9;</code>
+       */
+      public Builder clearConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+          onChanged();
+        } else {
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 9;</code>
+       */
+      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
+        
+        onChanged();
+        return getConnectionIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 9;</code>
+       */
+      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+        if (connectionIdBuilder_ != null) {
+          return connectionIdBuilder_.getMessageOrBuilder();
+        } else {
+          return connectionId_ == null ?
+              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+        }
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 9;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
+          getConnectionIdFieldBuilder() {
+        if (connectionIdBuilder_ == null) {
+          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
+                  getConnectionId(),
+                  getParentForChildren(),
+                  isClean());
+          connectionId_ = null;
+        }
+        return connectionIdBuilder_;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -2869,19 +3072,28 @@ public final class Monitoring {
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
+     * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
      */
-    boolean hasKpiId();
+    java.util.List<monitoring.Monitoring.KpiId> 
+        getKpiIdsList();
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
+     * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
      */
-    monitoring.Monitoring.KpiId getKpiId();
+    monitoring.Monitoring.KpiId getKpiIds(int index);
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
      */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
+    int getKpiIdsCount();
+    /**
+     * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
+     */
+    java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+        getKpiIdsOrBuilderList();
+    /**
+     * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
+     */
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdsOrBuilder(
+        int index);
 
     /**
      * <code>float monitoring_window_s = 2;</code>
@@ -2889,18 +3101,12 @@ public final class Monitoring {
      */
     float getMonitoringWindowS();
 
-    /**
-     * <code>float sampling_rate_s = 3;</code>
-     * @return The samplingRateS.
-     */
-    float getSamplingRateS();
-
     /**
      * <pre>
      * used when you want something like "get the last N many samples
      * </pre>
      *
-     * <code>uint32 last_n_samples = 4;</code>
+     * <code>uint32 last_n_samples = 3;</code>
      * @return The lastNSamples.
      */
     int getLastNSamples();
@@ -2910,7 +3116,7 @@ public final class Monitoring {
      * used when you want something like "get the samples since X date/time"
      * </pre>
      *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
+     * <code>.context.Timestamp start_timestamp = 4;</code>
      * @return Whether the startTimestamp field is set.
      */
     boolean hasStartTimestamp();
@@ -2919,7 +3125,7 @@ public final class Monitoring {
      * used when you want something like "get the samples since X date/time"
      * </pre>
      *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
+     * <code>.context.Timestamp start_timestamp = 4;</code>
      * @return The startTimestamp.
      */
     context.ContextOuterClass.Timestamp getStartTimestamp();
@@ -2928,7 +3134,7 @@ public final class Monitoring {
      * used when you want something like "get the samples since X date/time"
      * </pre>
      *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
+     * <code>.context.Timestamp start_timestamp = 4;</code>
      */
     context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder();
 
@@ -2937,7 +3143,7 @@ public final class Monitoring {
      * used when you want something like "get the samples until X date/time"
      * </pre>
      *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
+     * <code>.context.Timestamp end_timestamp = 5;</code>
      * @return Whether the endTimestamp field is set.
      */
     boolean hasEndTimestamp();
@@ -2946,7 +3152,7 @@ public final class Monitoring {
      * used when you want something like "get the samples until X date/time"
      * </pre>
      *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
+     * <code>.context.Timestamp end_timestamp = 5;</code>
      * @return The endTimestamp.
      */
     context.ContextOuterClass.Timestamp getEndTimestamp();
@@ -2955,7 +3161,7 @@ public final class Monitoring {
      * used when you want something like "get the samples until X date/time"
      * </pre>
      *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
+     * <code>.context.Timestamp end_timestamp = 5;</code>
      */
     context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder();
   }
@@ -2972,6 +3178,7 @@ public final class Monitoring {
       super(builder);
     }
     private KpiQuery() {
+      kpiIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
@@ -2994,6 +3201,7 @@ public final class Monitoring {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -3005,16 +3213,12 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              monitoring.Monitoring.KpiId.Builder subBuilder = null;
-              if (kpiId_ != null) {
-                subBuilder = kpiId_.toBuilder();
-              }
-              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiId_);
-                kpiId_ = subBuilder.buildPartial();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                kpiIds_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>();
+                mutable_bitField0_ |= 0x00000001;
               }
-
+              kpiIds_.add(
+                  input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry));
               break;
             }
             case 21: {
@@ -3022,17 +3226,12 @@ public final class Monitoring {
               monitoringWindowS_ = input.readFloat();
               break;
             }
-            case 29: {
-
-              samplingRateS_ = input.readFloat();
-              break;
-            }
-            case 32: {
+            case 24: {
 
               lastNSamples_ = input.readUInt32();
               break;
             }
-            case 42: {
+            case 34: {
               context.ContextOuterClass.Timestamp.Builder subBuilder = null;
               if (startTimestamp_ != null) {
                 subBuilder = startTimestamp_.toBuilder();
@@ -3045,7 +3244,7 @@ public final class Monitoring {
 
               break;
             }
-            case 50: {
+            case 42: {
               context.ContextOuterClass.Timestamp.Builder subBuilder = null;
               if (endTimestamp_ != null) {
                 subBuilder = endTimestamp_.toBuilder();
@@ -3073,6 +3272,9 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          kpiIds_ = java.util.Collections.unmodifiableList(kpiIds_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
@@ -3090,30 +3292,44 @@ public final class Monitoring {
               monitoring.Monitoring.KpiQuery.class, monitoring.Monitoring.KpiQuery.Builder.class);
     }
 
-    public static final int KPI_ID_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.KpiId kpiId_;
+    public static final int KPI_IDS_FIELD_NUMBER = 1;
+    private java.util.List<monitoring.Monitoring.KpiId> kpiIds_;
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
+     * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
      */
     @java.lang.Override
-    public boolean hasKpiId() {
-      return kpiId_ != null;
+    public java.util.List<monitoring.Monitoring.KpiId> getKpiIdsList() {
+      return kpiIds_;
     }
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
+     * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiId() {
-      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+    public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+        getKpiIdsOrBuilderList() {
+      return kpiIds_;
     }
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-      return getKpiId();
+    public int getKpiIdsCount() {
+      return kpiIds_.size();
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiId getKpiIds(int index) {
+      return kpiIds_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdsOrBuilder(
+        int index) {
+      return kpiIds_.get(index);
     }
 
     public static final int MONITORING_WINDOW_S_FIELD_NUMBER = 2;
@@ -3127,25 +3343,14 @@ public final class Monitoring {
       return monitoringWindowS_;
     }
 
-    public static final int SAMPLING_RATE_S_FIELD_NUMBER = 3;
-    private float samplingRateS_;
-    /**
-     * <code>float sampling_rate_s = 3;</code>
-     * @return The samplingRateS.
-     */
-    @java.lang.Override
-    public float getSamplingRateS() {
-      return samplingRateS_;
-    }
-
-    public static final int LAST_N_SAMPLES_FIELD_NUMBER = 4;
+    public static final int LAST_N_SAMPLES_FIELD_NUMBER = 3;
     private int lastNSamples_;
     /**
      * <pre>
      * used when you want something like "get the last N many samples
      * </pre>
      *
-     * <code>uint32 last_n_samples = 4;</code>
+     * <code>uint32 last_n_samples = 3;</code>
      * @return The lastNSamples.
      */
     @java.lang.Override
@@ -3153,14 +3358,14 @@ public final class Monitoring {
       return lastNSamples_;
     }
 
-    public static final int START_TIMESTAMP_FIELD_NUMBER = 5;
+    public static final int START_TIMESTAMP_FIELD_NUMBER = 4;
     private context.ContextOuterClass.Timestamp startTimestamp_;
     /**
      * <pre>
      * used when you want something like "get the samples since X date/time"
      * </pre>
      *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
+     * <code>.context.Timestamp start_timestamp = 4;</code>
      * @return Whether the startTimestamp field is set.
      */
     @java.lang.Override
@@ -3172,7 +3377,7 @@ public final class Monitoring {
      * used when you want something like "get the samples since X date/time"
      * </pre>
      *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
+     * <code>.context.Timestamp start_timestamp = 4;</code>
      * @return The startTimestamp.
      */
     @java.lang.Override
@@ -3184,21 +3389,21 @@ public final class Monitoring {
      * used when you want something like "get the samples since X date/time"
      * </pre>
      *
-     * <code>.context.Timestamp start_timestamp = 5;</code>
+     * <code>.context.Timestamp start_timestamp = 4;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder() {
       return getStartTimestamp();
     }
 
-    public static final int END_TIMESTAMP_FIELD_NUMBER = 6;
+    public static final int END_TIMESTAMP_FIELD_NUMBER = 5;
     private context.ContextOuterClass.Timestamp endTimestamp_;
     /**
      * <pre>
      * used when you want something like "get the samples until X date/time"
      * </pre>
      *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
+     * <code>.context.Timestamp end_timestamp = 5;</code>
      * @return Whether the endTimestamp field is set.
      */
     @java.lang.Override
@@ -3210,7 +3415,7 @@ public final class Monitoring {
      * used when you want something like "get the samples until X date/time"
      * </pre>
      *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
+     * <code>.context.Timestamp end_timestamp = 5;</code>
      * @return The endTimestamp.
      */
     @java.lang.Override
@@ -3222,7 +3427,7 @@ public final class Monitoring {
      * used when you want something like "get the samples until X date/time"
      * </pre>
      *
-     * <code>.context.Timestamp end_timestamp = 6;</code>
+     * <code>.context.Timestamp end_timestamp = 5;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder() {
@@ -3243,23 +3448,20 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (kpiId_ != null) {
-        output.writeMessage(1, getKpiId());
+      for (int i = 0; i < kpiIds_.size(); i++) {
+        output.writeMessage(1, kpiIds_.get(i));
       }
       if (monitoringWindowS_ != 0F) {
         output.writeFloat(2, monitoringWindowS_);
       }
-      if (samplingRateS_ != 0F) {
-        output.writeFloat(3, samplingRateS_);
-      }
       if (lastNSamples_ != 0) {
-        output.writeUInt32(4, lastNSamples_);
+        output.writeUInt32(3, lastNSamples_);
       }
       if (startTimestamp_ != null) {
-        output.writeMessage(5, getStartTimestamp());
+        output.writeMessage(4, getStartTimestamp());
       }
       if (endTimestamp_ != null) {
-        output.writeMessage(6, getEndTimestamp());
+        output.writeMessage(5, getEndTimestamp());
       }
       unknownFields.writeTo(output);
     }
@@ -3270,29 +3472,25 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (kpiId_ != null) {
+      for (int i = 0; i < kpiIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getKpiId());
+          .computeMessageSize(1, kpiIds_.get(i));
       }
       if (monitoringWindowS_ != 0F) {
         size += com.google.protobuf.CodedOutputStream
           .computeFloatSize(2, monitoringWindowS_);
       }
-      if (samplingRateS_ != 0F) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(3, samplingRateS_);
-      }
       if (lastNSamples_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(4, lastNSamples_);
+          .computeUInt32Size(3, lastNSamples_);
       }
       if (startTimestamp_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, getStartTimestamp());
+          .computeMessageSize(4, getStartTimestamp());
       }
       if (endTimestamp_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, getEndTimestamp());
+          .computeMessageSize(5, getEndTimestamp());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -3309,17 +3507,11 @@ public final class Monitoring {
       }
       monitoring.Monitoring.KpiQuery other = (monitoring.Monitoring.KpiQuery) obj;
 
-      if (hasKpiId() != other.hasKpiId()) return false;
-      if (hasKpiId()) {
-        if (!getKpiId()
-            .equals(other.getKpiId())) return false;
-      }
+      if (!getKpiIdsList()
+          .equals(other.getKpiIdsList())) return false;
       if (java.lang.Float.floatToIntBits(getMonitoringWindowS())
           != java.lang.Float.floatToIntBits(
               other.getMonitoringWindowS())) return false;
-      if (java.lang.Float.floatToIntBits(getSamplingRateS())
-          != java.lang.Float.floatToIntBits(
-              other.getSamplingRateS())) return false;
       if (getLastNSamples()
           != other.getLastNSamples()) return false;
       if (hasStartTimestamp() != other.hasStartTimestamp()) return false;
@@ -3343,16 +3535,13 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasKpiId()) {
-        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiId().hashCode();
+      if (getKpiIdsCount() > 0) {
+        hash = (37 * hash) + KPI_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiIdsList().hashCode();
       }
       hash = (37 * hash) + MONITORING_WINDOW_S_FIELD_NUMBER;
       hash = (53 * hash) + java.lang.Float.floatToIntBits(
           getMonitoringWindowS());
-      hash = (37 * hash) + SAMPLING_RATE_S_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getSamplingRateS());
       hash = (37 * hash) + LAST_N_SAMPLES_FIELD_NUMBER;
       hash = (53 * hash) + getLastNSamples();
       if (hasStartTimestamp()) {
@@ -3491,21 +3680,20 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getKpiIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
+        if (kpiIdsBuilder_ == null) {
+          kpiIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
+          kpiIdsBuilder_.clear();
         }
         monitoringWindowS_ = 0F;
 
-        samplingRateS_ = 0F;
-
         lastNSamples_ = 0;
 
         if (startTimestampBuilder_ == null) {
@@ -3546,13 +3734,17 @@ public final class Monitoring {
       @java.lang.Override
       public monitoring.Monitoring.KpiQuery buildPartial() {
         monitoring.Monitoring.KpiQuery result = new monitoring.Monitoring.KpiQuery(this);
-        if (kpiIdBuilder_ == null) {
-          result.kpiId_ = kpiId_;
+        int from_bitField0_ = bitField0_;
+        if (kpiIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            kpiIds_ = java.util.Collections.unmodifiableList(kpiIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.kpiIds_ = kpiIds_;
         } else {
-          result.kpiId_ = kpiIdBuilder_.build();
+          result.kpiIds_ = kpiIdsBuilder_.build();
         }
         result.monitoringWindowS_ = monitoringWindowS_;
-        result.samplingRateS_ = samplingRateS_;
         result.lastNSamples_ = lastNSamples_;
         if (startTimestampBuilder_ == null) {
           result.startTimestamp_ = startTimestamp_;
@@ -3612,15 +3804,35 @@ public final class Monitoring {
 
       public Builder mergeFrom(monitoring.Monitoring.KpiQuery other) {
         if (other == monitoring.Monitoring.KpiQuery.getDefaultInstance()) return this;
-        if (other.hasKpiId()) {
-          mergeKpiId(other.getKpiId());
+        if (kpiIdsBuilder_ == null) {
+          if (!other.kpiIds_.isEmpty()) {
+            if (kpiIds_.isEmpty()) {
+              kpiIds_ = other.kpiIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureKpiIdsIsMutable();
+              kpiIds_.addAll(other.kpiIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.kpiIds_.isEmpty()) {
+            if (kpiIdsBuilder_.isEmpty()) {
+              kpiIdsBuilder_.dispose();
+              kpiIdsBuilder_ = null;
+              kpiIds_ = other.kpiIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              kpiIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getKpiIdsFieldBuilder() : null;
+            } else {
+              kpiIdsBuilder_.addAllMessages(other.kpiIds_);
+            }
+          }
         }
         if (other.getMonitoringWindowS() != 0F) {
           setMonitoringWindowS(other.getMonitoringWindowS());
         }
-        if (other.getSamplingRateS() != 0F) {
-          setSamplingRateS(other.getSamplingRateS());
-        }
         if (other.getLastNSamples() != 0) {
           setLastNSamples(other.getLastNSamples());
         }
@@ -3658,124 +3870,246 @@ public final class Monitoring {
         }
         return this;
       }
+      private int bitField0_;
+
+      private java.util.List<monitoring.Monitoring.KpiId> kpiIds_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiIds_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(kpiIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdsBuilder_;
 
-      private monitoring.Monitoring.KpiId kpiId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return Whether the kpiId field is set.
+       * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
        */
-      public boolean hasKpiId() {
-        return kpiIdBuilder_ != null || kpiId_ != null;
+      public java.util.List<monitoring.Monitoring.KpiId> getKpiIdsList() {
+        if (kpiIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiIds_);
+        } else {
+          return kpiIdsBuilder_.getMessageList();
+        }
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return The kpiId.
+       * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
        */
-      public monitoring.Monitoring.KpiId getKpiId() {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+      public int getKpiIdsCount() {
+        if (kpiIdsBuilder_ == null) {
+          return kpiIds_.size();
         } else {
-          return kpiIdBuilder_.getMessage();
+          return kpiIdsBuilder_.getCount();
         }
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
        */
-      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
+      public monitoring.Monitoring.KpiId getKpiIds(int index) {
+        if (kpiIdsBuilder_ == null) {
+          return kpiIds_.get(index);
+        } else {
+          return kpiIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
+       */
+      public Builder setKpiIds(
+          int index, monitoring.Monitoring.KpiId value) {
+        if (kpiIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          kpiId_ = value;
+          ensureKpiIdsIsMutable();
+          kpiIds_.set(index, value);
           onChanged();
         } else {
-          kpiIdBuilder_.setMessage(value);
+          kpiIdsBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
        */
-      public Builder setKpiId(
-          monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = builderForValue.build();
+      public Builder setKpiIds(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdsBuilder_ == null) {
+          ensureKpiIdsIsMutable();
+          kpiIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          kpiIdBuilder_.setMessage(builderForValue.build());
+          kpiIdsBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
        */
-      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (kpiId_ != null) {
-            kpiId_ =
-              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
-          } else {
-            kpiId_ = value;
+      public Builder addKpiIds(monitoring.Monitoring.KpiId value) {
+        if (kpiIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureKpiIdsIsMutable();
+          kpiIds_.add(value);
           onChanged();
         } else {
-          kpiIdBuilder_.mergeFrom(value);
+          kpiIdsBuilder_.addMessage(value);
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
        */
-      public Builder clearKpiId() {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
+      public Builder addKpiIds(
+          int index, monitoring.Monitoring.KpiId value) {
+        if (kpiIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdsIsMutable();
+          kpiIds_.add(index, value);
           onChanged();
         } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
+          kpiIdsBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
        */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
-        
-        onChanged();
-        return getKpiIdFieldBuilder().getBuilder();
+      public Builder addKpiIds(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdsBuilder_ == null) {
+          ensureKpiIdsIsMutable();
+          kpiIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
        */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-        if (kpiIdBuilder_ != null) {
-          return kpiIdBuilder_.getMessageOrBuilder();
+      public Builder addKpiIds(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdsBuilder_ == null) {
+          ensureKpiIdsIsMutable();
+          kpiIds_.add(index, builderForValue.build());
+          onChanged();
         } else {
-          return kpiId_ == null ?
-              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+          kpiIdsBuilder_.addMessage(index, builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
+      public Builder addAllKpiIds(
+          java.lang.Iterable<? extends monitoring.Monitoring.KpiId> values) {
+        if (kpiIdsBuilder_ == null) {
+          ensureKpiIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiIds_);
+          onChanged();
+        } else {
+          kpiIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
+       */
+      public Builder clearKpiIds() {
+        if (kpiIdsBuilder_ == null) {
+          kpiIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          kpiIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
+       */
+      public Builder removeKpiIds(int index) {
+        if (kpiIdsBuilder_ == null) {
+          ensureKpiIdsIsMutable();
+          kpiIds_.remove(index);
+          onChanged();
+        } else {
+          kpiIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder getKpiIdsBuilder(
+          int index) {
+        return getKpiIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdsOrBuilder(
+          int index) {
+        if (kpiIdsBuilder_ == null) {
+          return kpiIds_.get(index);  } else {
+          return kpiIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+           getKpiIdsOrBuilderList() {
+        if (kpiIdsBuilder_ != null) {
+          return kpiIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(kpiIds_);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder addKpiIdsBuilder() {
+        return getKpiIdsFieldBuilder().addBuilder(
+            monitoring.Monitoring.KpiId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder addKpiIdsBuilder(
+          int index) {
+        return getKpiIdsFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.KpiId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_ids = 1;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiId.Builder> 
+           getKpiIdsBuilderList() {
+        return getKpiIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
           monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
-          getKpiIdFieldBuilder() {
-        if (kpiIdBuilder_ == null) {
-          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+          getKpiIdsFieldBuilder() {
+        if (kpiIdsBuilder_ == null) {
+          kpiIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
               monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  getKpiId(),
+                  kpiIds_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          kpiId_ = null;
+          kpiIds_ = null;
         }
-        return kpiIdBuilder_;
+        return kpiIdsBuilder_;
       }
 
       private float monitoringWindowS_ ;
@@ -3809,44 +4143,13 @@ public final class Monitoring {
         return this;
       }
 
-      private float samplingRateS_ ;
-      /**
-       * <code>float sampling_rate_s = 3;</code>
-       * @return The samplingRateS.
-       */
-      @java.lang.Override
-      public float getSamplingRateS() {
-        return samplingRateS_;
-      }
-      /**
-       * <code>float sampling_rate_s = 3;</code>
-       * @param value The samplingRateS to set.
-       * @return This builder for chaining.
-       */
-      public Builder setSamplingRateS(float value) {
-        
-        samplingRateS_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>float sampling_rate_s = 3;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearSamplingRateS() {
-        
-        samplingRateS_ = 0F;
-        onChanged();
-        return this;
-      }
-
       private int lastNSamples_ ;
       /**
        * <pre>
        * used when you want something like "get the last N many samples
        * </pre>
        *
-       * <code>uint32 last_n_samples = 4;</code>
+       * <code>uint32 last_n_samples = 3;</code>
        * @return The lastNSamples.
        */
       @java.lang.Override
@@ -3858,7 +4161,7 @@ public final class Monitoring {
        * used when you want something like "get the last N many samples
        * </pre>
        *
-       * <code>uint32 last_n_samples = 4;</code>
+       * <code>uint32 last_n_samples = 3;</code>
        * @param value The lastNSamples to set.
        * @return This builder for chaining.
        */
@@ -3873,7 +4176,7 @@ public final class Monitoring {
        * used when you want something like "get the last N many samples
        * </pre>
        *
-       * <code>uint32 last_n_samples = 4;</code>
+       * <code>uint32 last_n_samples = 3;</code>
        * @return This builder for chaining.
        */
       public Builder clearLastNSamples() {
@@ -3891,7 +4194,7 @@ public final class Monitoring {
        * used when you want something like "get the samples since X date/time"
        * </pre>
        *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>.context.Timestamp start_timestamp = 4;</code>
        * @return Whether the startTimestamp field is set.
        */
       public boolean hasStartTimestamp() {
@@ -3902,7 +4205,7 @@ public final class Monitoring {
        * used when you want something like "get the samples since X date/time"
        * </pre>
        *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>.context.Timestamp start_timestamp = 4;</code>
        * @return The startTimestamp.
        */
       public context.ContextOuterClass.Timestamp getStartTimestamp() {
@@ -3917,7 +4220,7 @@ public final class Monitoring {
        * used when you want something like "get the samples since X date/time"
        * </pre>
        *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>.context.Timestamp start_timestamp = 4;</code>
        */
       public Builder setStartTimestamp(context.ContextOuterClass.Timestamp value) {
         if (startTimestampBuilder_ == null) {
@@ -3937,7 +4240,7 @@ public final class Monitoring {
        * used when you want something like "get the samples since X date/time"
        * </pre>
        *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>.context.Timestamp start_timestamp = 4;</code>
        */
       public Builder setStartTimestamp(
           context.ContextOuterClass.Timestamp.Builder builderForValue) {
@@ -3955,7 +4258,7 @@ public final class Monitoring {
        * used when you want something like "get the samples since X date/time"
        * </pre>
        *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>.context.Timestamp start_timestamp = 4;</code>
        */
       public Builder mergeStartTimestamp(context.ContextOuterClass.Timestamp value) {
         if (startTimestampBuilder_ == null) {
@@ -3973,224 +4276,2861 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp start_timestamp = 4;</code>
+       */
+      public Builder clearStartTimestamp() {
+        if (startTimestampBuilder_ == null) {
+          startTimestamp_ = null;
+          onChanged();
+        } else {
+          startTimestamp_ = null;
+          startTimestampBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp start_timestamp = 4;</code>
+       */
+      public context.ContextOuterClass.Timestamp.Builder getStartTimestampBuilder() {
+        
+        onChanged();
+        return getStartTimestampFieldBuilder().getBuilder();
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp start_timestamp = 4;</code>
+       */
+      public context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder() {
+        if (startTimestampBuilder_ != null) {
+          return startTimestampBuilder_.getMessageOrBuilder();
+        } else {
+          return startTimestamp_ == null ?
+              context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_;
+        }
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp start_timestamp = 4;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
+          getStartTimestampFieldBuilder() {
+        if (startTimestampBuilder_ == null) {
+          startTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
+                  getStartTimestamp(),
+                  getParentForChildren(),
+                  isClean());
+          startTimestamp_ = null;
+        }
+        return startTimestampBuilder_;
+      }
+
+      private context.ContextOuterClass.Timestamp endTimestamp_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> endTimestampBuilder_;
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 5;</code>
+       * @return Whether the endTimestamp field is set.
+       */
+      public boolean hasEndTimestamp() {
+        return endTimestampBuilder_ != null || endTimestamp_ != null;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 5;</code>
+       * @return The endTimestamp.
+       */
+      public context.ContextOuterClass.Timestamp getEndTimestamp() {
+        if (endTimestampBuilder_ == null) {
+          return endTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_;
+        } else {
+          return endTimestampBuilder_.getMessage();
+        }
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 5;</code>
+       */
+      public Builder setEndTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (endTimestampBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          endTimestamp_ = value;
+          onChanged();
+        } else {
+          endTimestampBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 5;</code>
+       */
+      public Builder setEndTimestamp(
+          context.ContextOuterClass.Timestamp.Builder builderForValue) {
+        if (endTimestampBuilder_ == null) {
+          endTimestamp_ = builderForValue.build();
+          onChanged();
+        } else {
+          endTimestampBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 5;</code>
+       */
+      public Builder mergeEndTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (endTimestampBuilder_ == null) {
+          if (endTimestamp_ != null) {
+            endTimestamp_ =
+              context.ContextOuterClass.Timestamp.newBuilder(endTimestamp_).mergeFrom(value).buildPartial();
+          } else {
+            endTimestamp_ = value;
+          }
+          onChanged();
+        } else {
+          endTimestampBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 5;</code>
+       */
+      public Builder clearEndTimestamp() {
+        if (endTimestampBuilder_ == null) {
+          endTimestamp_ = null;
+          onChanged();
+        } else {
+          endTimestamp_ = null;
+          endTimestampBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 5;</code>
+       */
+      public context.ContextOuterClass.Timestamp.Builder getEndTimestampBuilder() {
+        
+        onChanged();
+        return getEndTimestampFieldBuilder().getBuilder();
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 5;</code>
+       */
+      public context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder() {
+        if (endTimestampBuilder_ != null) {
+          return endTimestampBuilder_.getMessageOrBuilder();
+        } else {
+          return endTimestamp_ == null ?
+              context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_;
+        }
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>.context.Timestamp end_timestamp = 5;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
+          getEndTimestampFieldBuilder() {
+        if (endTimestampBuilder_ == null) {
+          endTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
+                  getEndTimestamp(),
+                  getParentForChildren(),
+                  isClean());
+          endTimestamp_ = null;
+        }
+        return endTimestampBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiQuery)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.KpiQuery)
+    private static final monitoring.Monitoring.KpiQuery DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiQuery();
+    }
+
+    public static monitoring.Monitoring.KpiQuery getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<KpiQuery>
+        PARSER = new com.google.protobuf.AbstractParser<KpiQuery>() {
+      @java.lang.Override
+      public KpiQuery parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new KpiQuery(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<KpiQuery> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<KpiQuery> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.KpiQuery getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface RawKpiOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.RawKpi)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Timestamp timestamp = 1;</code>
+     * @return Whether the timestamp field is set.
+     */
+    boolean hasTimestamp();
+    /**
+     * <code>.context.Timestamp timestamp = 1;</code>
+     * @return The timestamp.
+     */
+    context.ContextOuterClass.Timestamp getTimestamp();
+    /**
+     * <code>.context.Timestamp timestamp = 1;</code>
+     */
+    context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder();
+
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 2;</code>
+     * @return Whether the kpiValue field is set.
+     */
+    boolean hasKpiValue();
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 2;</code>
+     * @return The kpiValue.
+     */
+    monitoring.Monitoring.KpiValue getKpiValue();
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 2;</code>
+     */
+    monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder();
+  }
+  /**
+   * <pre>
+   * cell
+   * </pre>
+   *
+   * Protobuf type {@code monitoring.RawKpi}
+   */
+  public static final class RawKpi extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.RawKpi)
+      RawKpiOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use RawKpi.newBuilder() to construct.
+    private RawKpi(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private RawKpi() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new RawKpi();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private RawKpi(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
+              if (timestamp_ != null) {
+                subBuilder = timestamp_.toBuilder();
+              }
+              timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(timestamp_);
+                timestamp_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              monitoring.Monitoring.KpiValue.Builder subBuilder = null;
+              if (kpiValue_ != null) {
+                subBuilder = kpiValue_.toBuilder();
+              }
+              kpiValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiValue_);
+                kpiValue_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_RawKpi_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_RawKpi_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.RawKpi.class, monitoring.Monitoring.RawKpi.Builder.class);
+    }
+
+    public static final int TIMESTAMP_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Timestamp timestamp_;
+    /**
+     * <code>.context.Timestamp timestamp = 1;</code>
+     * @return Whether the timestamp field is set.
+     */
+    @java.lang.Override
+    public boolean hasTimestamp() {
+      return timestamp_ != null;
+    }
+    /**
+     * <code>.context.Timestamp timestamp = 1;</code>
+     * @return The timestamp.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Timestamp getTimestamp() {
+      return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+    }
+    /**
+     * <code>.context.Timestamp timestamp = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
+      return getTimestamp();
+    }
+
+    public static final int KPI_VALUE_FIELD_NUMBER = 2;
+    private monitoring.Monitoring.KpiValue kpiValue_;
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 2;</code>
+     * @return Whether the kpiValue field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiValue() {
+      return kpiValue_ != null;
+    }
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 2;</code>
+     * @return The kpiValue.
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValue getKpiValue() {
+      return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+    }
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 2;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() {
+      return getKpiValue();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (timestamp_ != null) {
+        output.writeMessage(1, getTimestamp());
+      }
+      if (kpiValue_ != null) {
+        output.writeMessage(2, getKpiValue());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (timestamp_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getTimestamp());
+      }
+      if (kpiValue_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getKpiValue());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof monitoring.Monitoring.RawKpi)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.RawKpi other = (monitoring.Monitoring.RawKpi) obj;
+
+      if (hasTimestamp() != other.hasTimestamp()) return false;
+      if (hasTimestamp()) {
+        if (!getTimestamp()
+            .equals(other.getTimestamp())) return false;
+      }
+      if (hasKpiValue() != other.hasKpiValue()) return false;
+      if (hasKpiValue()) {
+        if (!getKpiValue()
+            .equals(other.getKpiValue())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasTimestamp()) {
+        hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
+        hash = (53 * hash) + getTimestamp().hashCode();
+      }
+      if (hasKpiValue()) {
+        hash = (37 * hash) + KPI_VALUE_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiValue().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.RawKpi parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.RawKpi parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.RawKpi parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.RawKpi parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.RawKpi parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.RawKpi parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.RawKpi parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.RawKpi parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.RawKpi parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.RawKpi parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.RawKpi parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.RawKpi parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(monitoring.Monitoring.RawKpi prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * cell
+     * </pre>
+     *
+     * Protobuf type {@code monitoring.RawKpi}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.RawKpi)
+        monitoring.Monitoring.RawKpiOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_RawKpi_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_RawKpi_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.RawKpi.class, monitoring.Monitoring.RawKpi.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.RawKpi.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (timestampBuilder_ == null) {
+          timestamp_ = null;
+        } else {
+          timestamp_ = null;
+          timestampBuilder_ = null;
+        }
+        if (kpiValueBuilder_ == null) {
+          kpiValue_ = null;
+        } else {
+          kpiValue_ = null;
+          kpiValueBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_RawKpi_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.RawKpi getDefaultInstanceForType() {
+        return monitoring.Monitoring.RawKpi.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.RawKpi build() {
+        monitoring.Monitoring.RawKpi result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.RawKpi buildPartial() {
+        monitoring.Monitoring.RawKpi result = new monitoring.Monitoring.RawKpi(this);
+        if (timestampBuilder_ == null) {
+          result.timestamp_ = timestamp_;
+        } else {
+          result.timestamp_ = timestampBuilder_.build();
+        }
+        if (kpiValueBuilder_ == null) {
+          result.kpiValue_ = kpiValue_;
+        } else {
+          result.kpiValue_ = kpiValueBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.RawKpi) {
+          return mergeFrom((monitoring.Monitoring.RawKpi)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.RawKpi other) {
+        if (other == monitoring.Monitoring.RawKpi.getDefaultInstance()) return this;
+        if (other.hasTimestamp()) {
+          mergeTimestamp(other.getTimestamp());
+        }
+        if (other.hasKpiValue()) {
+          mergeKpiValue(other.getKpiValue());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.RawKpi parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.RawKpi) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.Timestamp timestamp_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
+      /**
+       * <code>.context.Timestamp timestamp = 1;</code>
+       * @return Whether the timestamp field is set.
+       */
+      public boolean hasTimestamp() {
+        return timestampBuilder_ != null || timestamp_ != null;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 1;</code>
+       * @return The timestamp.
+       */
+      public context.ContextOuterClass.Timestamp getTimestamp() {
+        if (timestampBuilder_ == null) {
+          return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+        } else {
+          return timestampBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 1;</code>
+       */
+      public Builder setTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (timestampBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          timestamp_ = value;
+          onChanged();
+        } else {
+          timestampBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 1;</code>
+       */
+      public Builder setTimestamp(
+          context.ContextOuterClass.Timestamp.Builder builderForValue) {
+        if (timestampBuilder_ == null) {
+          timestamp_ = builderForValue.build();
+          onChanged();
+        } else {
+          timestampBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 1;</code>
+       */
+      public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (timestampBuilder_ == null) {
+          if (timestamp_ != null) {
+            timestamp_ =
+              context.ContextOuterClass.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
+          } else {
+            timestamp_ = value;
+          }
+          onChanged();
+        } else {
+          timestampBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 1;</code>
+       */
+      public Builder clearTimestamp() {
+        if (timestampBuilder_ == null) {
+          timestamp_ = null;
+          onChanged();
+        } else {
+          timestamp_ = null;
+          timestampBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 1;</code>
+       */
+      public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
+        
+        onChanged();
+        return getTimestampFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 1;</code>
+       */
+      public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
+        if (timestampBuilder_ != null) {
+          return timestampBuilder_.getMessageOrBuilder();
+        } else {
+          return timestamp_ == null ?
+              context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+        }
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
+          getTimestampFieldBuilder() {
+        if (timestampBuilder_ == null) {
+          timestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
+                  getTimestamp(),
+                  getParentForChildren(),
+                  isClean());
+          timestamp_ = null;
+        }
+        return timestampBuilder_;
+      }
+
+      private monitoring.Monitoring.KpiValue kpiValue_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiValueBuilder_;
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 2;</code>
+       * @return Whether the kpiValue field is set.
+       */
+      public boolean hasKpiValue() {
+        return kpiValueBuilder_ != null || kpiValue_ != null;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 2;</code>
+       * @return The kpiValue.
+       */
+      public monitoring.Monitoring.KpiValue getKpiValue() {
+        if (kpiValueBuilder_ == null) {
+          return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+        } else {
+          return kpiValueBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 2;</code>
+       */
+      public Builder setKpiValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiValueBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiValue_ = value;
+          onChanged();
+        } else {
+          kpiValueBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 2;</code>
+       */
+      public Builder setKpiValue(
+          monitoring.Monitoring.KpiValue.Builder builderForValue) {
+        if (kpiValueBuilder_ == null) {
+          kpiValue_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiValueBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 2;</code>
+       */
+      public Builder mergeKpiValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiValueBuilder_ == null) {
+          if (kpiValue_ != null) {
+            kpiValue_ =
+              monitoring.Monitoring.KpiValue.newBuilder(kpiValue_).mergeFrom(value).buildPartial();
+          } else {
+            kpiValue_ = value;
+          }
+          onChanged();
+        } else {
+          kpiValueBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 2;</code>
+       */
+      public Builder clearKpiValue() {
+        if (kpiValueBuilder_ == null) {
+          kpiValue_ = null;
+          onChanged();
+        } else {
+          kpiValue_ = null;
+          kpiValueBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 2;</code>
+       */
+      public monitoring.Monitoring.KpiValue.Builder getKpiValueBuilder() {
+        
+        onChanged();
+        return getKpiValueFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 2;</code>
+       */
+      public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() {
+        if (kpiValueBuilder_ != null) {
+          return kpiValueBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiValue_ == null ?
+              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+        }
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> 
+          getKpiValueFieldBuilder() {
+        if (kpiValueBuilder_ == null) {
+          kpiValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder>(
+                  getKpiValue(),
+                  getParentForChildren(),
+                  isClean());
+          kpiValue_ = null;
+        }
+        return kpiValueBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:monitoring.RawKpi)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.RawKpi)
+    private static final monitoring.Monitoring.RawKpi DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.RawKpi();
+    }
+
+    public static monitoring.Monitoring.RawKpi getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<RawKpi>
+        PARSER = new com.google.protobuf.AbstractParser<RawKpi>() {
+      @java.lang.Override
+      public RawKpi parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new RawKpi(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<RawKpi> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<RawKpi> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.RawKpi getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface RawKpiListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.RawKpiList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
+     */
+    boolean hasKpiId();
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
+     */
+    monitoring.Monitoring.KpiId getKpiId();
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     */
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
+
+    /**
+     * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+     */
+    java.util.List<monitoring.Monitoring.RawKpi> 
+        getRawKpisList();
+    /**
+     * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+     */
+    monitoring.Monitoring.RawKpi getRawKpis(int index);
+    /**
+     * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+     */
+    int getRawKpisCount();
+    /**
+     * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+     */
+    java.util.List<? extends monitoring.Monitoring.RawKpiOrBuilder> 
+        getRawKpisOrBuilderList();
+    /**
+     * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+     */
+    monitoring.Monitoring.RawKpiOrBuilder getRawKpisOrBuilder(
+        int index);
+  }
+  /**
+   * <pre>
+   * column
+   * </pre>
+   *
+   * Protobuf type {@code monitoring.RawKpiList}
+   */
+  public static final class RawKpiList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.RawKpiList)
+      RawKpiListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use RawKpiList.newBuilder() to construct.
+    private RawKpiList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private RawKpiList() {
+      rawKpis_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new RawKpiList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private RawKpiList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              monitoring.Monitoring.KpiId.Builder subBuilder = null;
+              if (kpiId_ != null) {
+                subBuilder = kpiId_.toBuilder();
+              }
+              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiId_);
+                kpiId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                rawKpis_ = new java.util.ArrayList<monitoring.Monitoring.RawKpi>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              rawKpis_.add(
+                  input.readMessage(monitoring.Monitoring.RawKpi.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          rawKpis_ = java.util.Collections.unmodifiableList(rawKpis_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_RawKpiList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_RawKpiList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.RawKpiList.class, monitoring.Monitoring.RawKpiList.Builder.class);
+    }
+
+    public static final int KPI_ID_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.KpiId kpiId_;
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiId() {
+      return kpiId_ != null;
+    }
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiId getKpiId() {
+      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+    }
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+      return getKpiId();
+    }
+
+    public static final int RAW_KPIS_FIELD_NUMBER = 2;
+    private java.util.List<monitoring.Monitoring.RawKpi> rawKpis_;
+    /**
+     * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<monitoring.Monitoring.RawKpi> getRawKpisList() {
+      return rawKpis_;
+    }
+    /**
+     * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends monitoring.Monitoring.RawKpiOrBuilder> 
+        getRawKpisOrBuilderList() {
+      return rawKpis_;
+    }
+    /**
+     * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+     */
+    @java.lang.Override
+    public int getRawKpisCount() {
+      return rawKpis_.size();
+    }
+    /**
+     * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.RawKpi getRawKpis(int index) {
+      return rawKpis_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.RawKpiOrBuilder getRawKpisOrBuilder(
+        int index) {
+      return rawKpis_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (kpiId_ != null) {
+        output.writeMessage(1, getKpiId());
+      }
+      for (int i = 0; i < rawKpis_.size(); i++) {
+        output.writeMessage(2, rawKpis_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (kpiId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getKpiId());
+      }
+      for (int i = 0; i < rawKpis_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, rawKpis_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof monitoring.Monitoring.RawKpiList)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.RawKpiList other = (monitoring.Monitoring.RawKpiList) obj;
+
+      if (hasKpiId() != other.hasKpiId()) return false;
+      if (hasKpiId()) {
+        if (!getKpiId()
+            .equals(other.getKpiId())) return false;
+      }
+      if (!getRawKpisList()
+          .equals(other.getRawKpisList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasKpiId()) {
+        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiId().hashCode();
+      }
+      if (getRawKpisCount() > 0) {
+        hash = (37 * hash) + RAW_KPIS_FIELD_NUMBER;
+        hash = (53 * hash) + getRawKpisList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.RawKpiList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.RawKpiList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.RawKpiList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.RawKpiList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.RawKpiList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.RawKpiList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.RawKpiList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.RawKpiList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.RawKpiList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.RawKpiList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.RawKpiList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.RawKpiList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(monitoring.Monitoring.RawKpiList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * column
+     * </pre>
+     *
+     * Protobuf type {@code monitoring.RawKpiList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.RawKpiList)
+        monitoring.Monitoring.RawKpiListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_RawKpiList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_RawKpiList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.RawKpiList.class, monitoring.Monitoring.RawKpiList.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.RawKpiList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getRawKpisFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
+        if (rawKpisBuilder_ == null) {
+          rawKpis_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          rawKpisBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_RawKpiList_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.RawKpiList getDefaultInstanceForType() {
+        return monitoring.Monitoring.RawKpiList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.RawKpiList build() {
+        monitoring.Monitoring.RawKpiList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.RawKpiList buildPartial() {
+        monitoring.Monitoring.RawKpiList result = new monitoring.Monitoring.RawKpiList(this);
+        int from_bitField0_ = bitField0_;
+        if (kpiIdBuilder_ == null) {
+          result.kpiId_ = kpiId_;
+        } else {
+          result.kpiId_ = kpiIdBuilder_.build();
+        }
+        if (rawKpisBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            rawKpis_ = java.util.Collections.unmodifiableList(rawKpis_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.rawKpis_ = rawKpis_;
+        } else {
+          result.rawKpis_ = rawKpisBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.RawKpiList) {
+          return mergeFrom((monitoring.Monitoring.RawKpiList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.RawKpiList other) {
+        if (other == monitoring.Monitoring.RawKpiList.getDefaultInstance()) return this;
+        if (other.hasKpiId()) {
+          mergeKpiId(other.getKpiId());
+        }
+        if (rawKpisBuilder_ == null) {
+          if (!other.rawKpis_.isEmpty()) {
+            if (rawKpis_.isEmpty()) {
+              rawKpis_ = other.rawKpis_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureRawKpisIsMutable();
+              rawKpis_.addAll(other.rawKpis_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.rawKpis_.isEmpty()) {
+            if (rawKpisBuilder_.isEmpty()) {
+              rawKpisBuilder_.dispose();
+              rawKpisBuilder_ = null;
+              rawKpis_ = other.rawKpis_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              rawKpisBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getRawKpisFieldBuilder() : null;
+            } else {
+              rawKpisBuilder_.addAllMessages(other.rawKpis_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.RawKpiList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.RawKpiList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private monitoring.Monitoring.KpiId kpiId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return Whether the kpiId field is set.
+       */
+      public boolean hasKpiId() {
+        return kpiIdBuilder_ != null || kpiId_ != null;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return The kpiId.
+       */
+      public monitoring.Monitoring.KpiId getKpiId() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+        } else {
+          return kpiIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiId_ = value;
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder setKpiId(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (kpiId_ != null) {
+            kpiId_ =
+              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+          } else {
+            kpiId_ = value;
+          }
+          onChanged();
+        } else {
+          kpiIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+          onChanged();
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+        
+        onChanged();
+        return getKpiIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiId_ == null ?
+              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+        }
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
+          getKpiIdFieldBuilder() {
+        if (kpiIdBuilder_ == null) {
+          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
+                  getKpiId(),
+                  getParentForChildren(),
+                  isClean());
+          kpiId_ = null;
+        }
+        return kpiIdBuilder_;
+      }
+
+      private java.util.List<monitoring.Monitoring.RawKpi> rawKpis_ =
+        java.util.Collections.emptyList();
+      private void ensureRawKpisIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          rawKpis_ = new java.util.ArrayList<monitoring.Monitoring.RawKpi>(rawKpis_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.RawKpi, monitoring.Monitoring.RawKpi.Builder, monitoring.Monitoring.RawKpiOrBuilder> rawKpisBuilder_;
+
+      /**
+       * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+       */
+      public java.util.List<monitoring.Monitoring.RawKpi> getRawKpisList() {
+        if (rawKpisBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(rawKpis_);
+        } else {
+          return rawKpisBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+       */
+      public int getRawKpisCount() {
+        if (rawKpisBuilder_ == null) {
+          return rawKpis_.size();
+        } else {
+          return rawKpisBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+       */
+      public monitoring.Monitoring.RawKpi getRawKpis(int index) {
+        if (rawKpisBuilder_ == null) {
+          return rawKpis_.get(index);
+        } else {
+          return rawKpisBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+       */
+      public Builder setRawKpis(
+          int index, monitoring.Monitoring.RawKpi value) {
+        if (rawKpisBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureRawKpisIsMutable();
+          rawKpis_.set(index, value);
+          onChanged();
+        } else {
+          rawKpisBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+       */
+      public Builder setRawKpis(
+          int index, monitoring.Monitoring.RawKpi.Builder builderForValue) {
+        if (rawKpisBuilder_ == null) {
+          ensureRawKpisIsMutable();
+          rawKpis_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          rawKpisBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+       */
+      public Builder addRawKpis(monitoring.Monitoring.RawKpi value) {
+        if (rawKpisBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureRawKpisIsMutable();
+          rawKpis_.add(value);
+          onChanged();
+        } else {
+          rawKpisBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+       */
+      public Builder addRawKpis(
+          int index, monitoring.Monitoring.RawKpi value) {
+        if (rawKpisBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureRawKpisIsMutable();
+          rawKpis_.add(index, value);
+          onChanged();
+        } else {
+          rawKpisBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+       */
+      public Builder addRawKpis(
+          monitoring.Monitoring.RawKpi.Builder builderForValue) {
+        if (rawKpisBuilder_ == null) {
+          ensureRawKpisIsMutable();
+          rawKpis_.add(builderForValue.build());
+          onChanged();
+        } else {
+          rawKpisBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+       */
+      public Builder addRawKpis(
+          int index, monitoring.Monitoring.RawKpi.Builder builderForValue) {
+        if (rawKpisBuilder_ == null) {
+          ensureRawKpisIsMutable();
+          rawKpis_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          rawKpisBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+       */
+      public Builder addAllRawKpis(
+          java.lang.Iterable<? extends monitoring.Monitoring.RawKpi> values) {
+        if (rawKpisBuilder_ == null) {
+          ensureRawKpisIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, rawKpis_);
+          onChanged();
+        } else {
+          rawKpisBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+       */
+      public Builder clearRawKpis() {
+        if (rawKpisBuilder_ == null) {
+          rawKpis_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          rawKpisBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+       */
+      public Builder removeRawKpis(int index) {
+        if (rawKpisBuilder_ == null) {
+          ensureRawKpisIsMutable();
+          rawKpis_.remove(index);
+          onChanged();
+        } else {
+          rawKpisBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+       */
+      public monitoring.Monitoring.RawKpi.Builder getRawKpisBuilder(
+          int index) {
+        return getRawKpisFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+       */
+      public monitoring.Monitoring.RawKpiOrBuilder getRawKpisOrBuilder(
+          int index) {
+        if (rawKpisBuilder_ == null) {
+          return rawKpis_.get(index);  } else {
+          return rawKpisBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.RawKpiOrBuilder> 
+           getRawKpisOrBuilderList() {
+        if (rawKpisBuilder_ != null) {
+          return rawKpisBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(rawKpis_);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+       */
+      public monitoring.Monitoring.RawKpi.Builder addRawKpisBuilder() {
+        return getRawKpisFieldBuilder().addBuilder(
+            monitoring.Monitoring.RawKpi.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+       */
+      public monitoring.Monitoring.RawKpi.Builder addRawKpisBuilder(
+          int index) {
+        return getRawKpisFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.RawKpi.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.RawKpi raw_kpis = 2;</code>
+       */
+      public java.util.List<monitoring.Monitoring.RawKpi.Builder> 
+           getRawKpisBuilderList() {
+        return getRawKpisFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.RawKpi, monitoring.Monitoring.RawKpi.Builder, monitoring.Monitoring.RawKpiOrBuilder> 
+          getRawKpisFieldBuilder() {
+        if (rawKpisBuilder_ == null) {
+          rawKpisBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.RawKpi, monitoring.Monitoring.RawKpi.Builder, monitoring.Monitoring.RawKpiOrBuilder>(
+                  rawKpis_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          rawKpis_ = null;
+        }
+        return rawKpisBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:monitoring.RawKpiList)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.RawKpiList)
+    private static final monitoring.Monitoring.RawKpiList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.RawKpiList();
+    }
+
+    public static monitoring.Monitoring.RawKpiList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<RawKpiList>
+        PARSER = new com.google.protobuf.AbstractParser<RawKpiList>() {
+      @java.lang.Override
+      public RawKpiList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new RawKpiList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<RawKpiList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<RawKpiList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.RawKpiList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface RawKpiTableOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.RawKpiTable)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
+     */
+    java.util.List<monitoring.Monitoring.RawKpiList> 
+        getRawKpiListsList();
+    /**
+     * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
+     */
+    monitoring.Monitoring.RawKpiList getRawKpiLists(int index);
+    /**
+     * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
+     */
+    int getRawKpiListsCount();
+    /**
+     * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
+     */
+    java.util.List<? extends monitoring.Monitoring.RawKpiListOrBuilder> 
+        getRawKpiListsOrBuilderList();
+    /**
+     * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
+     */
+    monitoring.Monitoring.RawKpiListOrBuilder getRawKpiListsOrBuilder(
+        int index);
+  }
+  /**
+   * <pre>
+   * table
+   * </pre>
+   *
+   * Protobuf type {@code monitoring.RawKpiTable}
+   */
+  public static final class RawKpiTable extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.RawKpiTable)
+      RawKpiTableOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use RawKpiTable.newBuilder() to construct.
+    private RawKpiTable(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private RawKpiTable() {
+      rawKpiLists_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new RawKpiTable();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private RawKpiTable(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                rawKpiLists_ = new java.util.ArrayList<monitoring.Monitoring.RawKpiList>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              rawKpiLists_.add(
+                  input.readMessage(monitoring.Monitoring.RawKpiList.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          rawKpiLists_ = java.util.Collections.unmodifiableList(rawKpiLists_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_RawKpiTable_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_RawKpiTable_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.RawKpiTable.class, monitoring.Monitoring.RawKpiTable.Builder.class);
+    }
+
+    public static final int RAW_KPI_LISTS_FIELD_NUMBER = 1;
+    private java.util.List<monitoring.Monitoring.RawKpiList> rawKpiLists_;
+    /**
+     * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<monitoring.Monitoring.RawKpiList> getRawKpiListsList() {
+      return rawKpiLists_;
+    }
+    /**
+     * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends monitoring.Monitoring.RawKpiListOrBuilder> 
+        getRawKpiListsOrBuilderList() {
+      return rawKpiLists_;
+    }
+    /**
+     * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
+     */
+    @java.lang.Override
+    public int getRawKpiListsCount() {
+      return rawKpiLists_.size();
+    }
+    /**
+     * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.RawKpiList getRawKpiLists(int index) {
+      return rawKpiLists_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.RawKpiListOrBuilder getRawKpiListsOrBuilder(
+        int index) {
+      return rawKpiLists_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < rawKpiLists_.size(); i++) {
+        output.writeMessage(1, rawKpiLists_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < rawKpiLists_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, rawKpiLists_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof monitoring.Monitoring.RawKpiTable)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.RawKpiTable other = (monitoring.Monitoring.RawKpiTable) obj;
+
+      if (!getRawKpiListsList()
+          .equals(other.getRawKpiListsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getRawKpiListsCount() > 0) {
+        hash = (37 * hash) + RAW_KPI_LISTS_FIELD_NUMBER;
+        hash = (53 * hash) + getRawKpiListsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.RawKpiTable parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.RawKpiTable parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.RawKpiTable parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.RawKpiTable parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.RawKpiTable parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.RawKpiTable parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.RawKpiTable parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.RawKpiTable parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.RawKpiTable parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.RawKpiTable parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.RawKpiTable parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.RawKpiTable parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(monitoring.Monitoring.RawKpiTable prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * table
+     * </pre>
+     *
+     * Protobuf type {@code monitoring.RawKpiTable}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.RawKpiTable)
+        monitoring.Monitoring.RawKpiTableOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_RawKpiTable_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_RawKpiTable_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.RawKpiTable.class, monitoring.Monitoring.RawKpiTable.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.RawKpiTable.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getRawKpiListsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (rawKpiListsBuilder_ == null) {
+          rawKpiLists_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          rawKpiListsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_RawKpiTable_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.RawKpiTable getDefaultInstanceForType() {
+        return monitoring.Monitoring.RawKpiTable.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.RawKpiTable build() {
+        monitoring.Monitoring.RawKpiTable result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.RawKpiTable buildPartial() {
+        monitoring.Monitoring.RawKpiTable result = new monitoring.Monitoring.RawKpiTable(this);
+        int from_bitField0_ = bitField0_;
+        if (rawKpiListsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            rawKpiLists_ = java.util.Collections.unmodifiableList(rawKpiLists_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.rawKpiLists_ = rawKpiLists_;
+        } else {
+          result.rawKpiLists_ = rawKpiListsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.RawKpiTable) {
+          return mergeFrom((monitoring.Monitoring.RawKpiTable)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.RawKpiTable other) {
+        if (other == monitoring.Monitoring.RawKpiTable.getDefaultInstance()) return this;
+        if (rawKpiListsBuilder_ == null) {
+          if (!other.rawKpiLists_.isEmpty()) {
+            if (rawKpiLists_.isEmpty()) {
+              rawKpiLists_ = other.rawKpiLists_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureRawKpiListsIsMutable();
+              rawKpiLists_.addAll(other.rawKpiLists_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.rawKpiLists_.isEmpty()) {
+            if (rawKpiListsBuilder_.isEmpty()) {
+              rawKpiListsBuilder_.dispose();
+              rawKpiListsBuilder_ = null;
+              rawKpiLists_ = other.rawKpiLists_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              rawKpiListsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getRawKpiListsFieldBuilder() : null;
+            } else {
+              rawKpiListsBuilder_.addAllMessages(other.rawKpiLists_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.RawKpiTable parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.RawKpiTable) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<monitoring.Monitoring.RawKpiList> rawKpiLists_ =
+        java.util.Collections.emptyList();
+      private void ensureRawKpiListsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          rawKpiLists_ = new java.util.ArrayList<monitoring.Monitoring.RawKpiList>(rawKpiLists_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.RawKpiList, monitoring.Monitoring.RawKpiList.Builder, monitoring.Monitoring.RawKpiListOrBuilder> rawKpiListsBuilder_;
+
+      /**
+       * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
        */
-      public Builder clearStartTimestamp() {
-        if (startTimestampBuilder_ == null) {
-          startTimestamp_ = null;
-          onChanged();
+      public java.util.List<monitoring.Monitoring.RawKpiList> getRawKpiListsList() {
+        if (rawKpiListsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(rawKpiLists_);
         } else {
-          startTimestamp_ = null;
-          startTimestampBuilder_ = null;
+          return rawKpiListsBuilder_.getMessageList();
         }
-
-        return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
        */
-      public context.ContextOuterClass.Timestamp.Builder getStartTimestampBuilder() {
-        
-        onChanged();
-        return getStartTimestampFieldBuilder().getBuilder();
+      public int getRawKpiListsCount() {
+        if (rawKpiListsBuilder_ == null) {
+          return rawKpiLists_.size();
+        } else {
+          return rawKpiListsBuilder_.getCount();
+        }
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
        */
-      public context.ContextOuterClass.TimestampOrBuilder getStartTimestampOrBuilder() {
-        if (startTimestampBuilder_ != null) {
-          return startTimestampBuilder_.getMessageOrBuilder();
+      public monitoring.Monitoring.RawKpiList getRawKpiLists(int index) {
+        if (rawKpiListsBuilder_ == null) {
+          return rawKpiLists_.get(index);
         } else {
-          return startTimestamp_ == null ?
-              context.ContextOuterClass.Timestamp.getDefaultInstance() : startTimestamp_;
+          return rawKpiListsBuilder_.getMessage(index);
         }
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples since X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp start_timestamp = 5;</code>
+       * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
-          getStartTimestampFieldBuilder() {
-        if (startTimestampBuilder_ == null) {
-          startTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
-                  getStartTimestamp(),
-                  getParentForChildren(),
-                  isClean());
-          startTimestamp_ = null;
+      public Builder setRawKpiLists(
+          int index, monitoring.Monitoring.RawKpiList value) {
+        if (rawKpiListsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureRawKpiListsIsMutable();
+          rawKpiLists_.set(index, value);
+          onChanged();
+        } else {
+          rawKpiListsBuilder_.setMessage(index, value);
         }
-        return startTimestampBuilder_;
+        return this;
       }
-
-      private context.ContextOuterClass.Timestamp endTimestamp_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> endTimestampBuilder_;
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
-       * @return Whether the endTimestamp field is set.
+       * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
        */
-      public boolean hasEndTimestamp() {
-        return endTimestampBuilder_ != null || endTimestamp_ != null;
+      public Builder setRawKpiLists(
+          int index, monitoring.Monitoring.RawKpiList.Builder builderForValue) {
+        if (rawKpiListsBuilder_ == null) {
+          ensureRawKpiListsIsMutable();
+          rawKpiLists_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          rawKpiListsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
-       * @return The endTimestamp.
+       * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
        */
-      public context.ContextOuterClass.Timestamp getEndTimestamp() {
-        if (endTimestampBuilder_ == null) {
-          return endTimestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_;
+      public Builder addRawKpiLists(monitoring.Monitoring.RawKpiList value) {
+        if (rawKpiListsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureRawKpiListsIsMutable();
+          rawKpiLists_.add(value);
+          onChanged();
         } else {
-          return endTimestampBuilder_.getMessage();
+          rawKpiListsBuilder_.addMessage(value);
         }
+        return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
        */
-      public Builder setEndTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (endTimestampBuilder_ == null) {
+      public Builder addRawKpiLists(
+          int index, monitoring.Monitoring.RawKpiList value) {
+        if (rawKpiListsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          endTimestamp_ = value;
+          ensureRawKpiListsIsMutable();
+          rawKpiLists_.add(index, value);
           onChanged();
         } else {
-          endTimestampBuilder_.setMessage(value);
+          rawKpiListsBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
        */
-      public Builder setEndTimestamp(
-          context.ContextOuterClass.Timestamp.Builder builderForValue) {
-        if (endTimestampBuilder_ == null) {
-          endTimestamp_ = builderForValue.build();
+      public Builder addRawKpiLists(
+          monitoring.Monitoring.RawKpiList.Builder builderForValue) {
+        if (rawKpiListsBuilder_ == null) {
+          ensureRawKpiListsIsMutable();
+          rawKpiLists_.add(builderForValue.build());
           onChanged();
         } else {
-          endTimestampBuilder_.setMessage(builderForValue.build());
+          rawKpiListsBuilder_.addMessage(builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
        */
-      public Builder mergeEndTimestamp(context.ContextOuterClass.Timestamp value) {
-        if (endTimestampBuilder_ == null) {
-          if (endTimestamp_ != null) {
-            endTimestamp_ =
-              context.ContextOuterClass.Timestamp.newBuilder(endTimestamp_).mergeFrom(value).buildPartial();
-          } else {
-            endTimestamp_ = value;
-          }
+      public Builder addRawKpiLists(
+          int index, monitoring.Monitoring.RawKpiList.Builder builderForValue) {
+        if (rawKpiListsBuilder_ == null) {
+          ensureRawKpiListsIsMutable();
+          rawKpiLists_.add(index, builderForValue.build());
           onChanged();
         } else {
-          endTimestampBuilder_.mergeFrom(value);
+          rawKpiListsBuilder_.addMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
        */
-      public Builder clearEndTimestamp() {
-        if (endTimestampBuilder_ == null) {
-          endTimestamp_ = null;
+      public Builder addAllRawKpiLists(
+          java.lang.Iterable<? extends monitoring.Monitoring.RawKpiList> values) {
+        if (rawKpiListsBuilder_ == null) {
+          ensureRawKpiListsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, rawKpiLists_);
           onChanged();
         } else {
-          endTimestamp_ = null;
-          endTimestampBuilder_ = null;
+          rawKpiListsBuilder_.addAllMessages(values);
         }
-
         return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
        */
-      public context.ContextOuterClass.Timestamp.Builder getEndTimestampBuilder() {
-        
-        onChanged();
-        return getEndTimestampFieldBuilder().getBuilder();
+      public Builder clearRawKpiLists() {
+        if (rawKpiListsBuilder_ == null) {
+          rawKpiLists_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          rawKpiListsBuilder_.clear();
+        }
+        return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
        */
-      public context.ContextOuterClass.TimestampOrBuilder getEndTimestampOrBuilder() {
-        if (endTimestampBuilder_ != null) {
-          return endTimestampBuilder_.getMessageOrBuilder();
+      public Builder removeRawKpiLists(int index) {
+        if (rawKpiListsBuilder_ == null) {
+          ensureRawKpiListsIsMutable();
+          rawKpiLists_.remove(index);
+          onChanged();
         } else {
-          return endTimestamp_ == null ?
-              context.ContextOuterClass.Timestamp.getDefaultInstance() : endTimestamp_;
+          rawKpiListsBuilder_.remove(index);
         }
+        return this;
       }
       /**
-       * <pre>
-       * used when you want something like "get the samples until X date/time"
-       * </pre>
-       *
-       * <code>.context.Timestamp end_timestamp = 6;</code>
+       * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
-          getEndTimestampFieldBuilder() {
-        if (endTimestampBuilder_ == null) {
-          endTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
-                  getEndTimestamp(),
+      public monitoring.Monitoring.RawKpiList.Builder getRawKpiListsBuilder(
+          int index) {
+        return getRawKpiListsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
+       */
+      public monitoring.Monitoring.RawKpiListOrBuilder getRawKpiListsOrBuilder(
+          int index) {
+        if (rawKpiListsBuilder_ == null) {
+          return rawKpiLists_.get(index);  } else {
+          return rawKpiListsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.RawKpiListOrBuilder> 
+           getRawKpiListsOrBuilderList() {
+        if (rawKpiListsBuilder_ != null) {
+          return rawKpiListsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(rawKpiLists_);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
+       */
+      public monitoring.Monitoring.RawKpiList.Builder addRawKpiListsBuilder() {
+        return getRawKpiListsFieldBuilder().addBuilder(
+            monitoring.Monitoring.RawKpiList.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
+       */
+      public monitoring.Monitoring.RawKpiList.Builder addRawKpiListsBuilder(
+          int index) {
+        return getRawKpiListsFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.RawKpiList.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.RawKpiList raw_kpi_lists = 1;</code>
+       */
+      public java.util.List<monitoring.Monitoring.RawKpiList.Builder> 
+           getRawKpiListsBuilderList() {
+        return getRawKpiListsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.RawKpiList, monitoring.Monitoring.RawKpiList.Builder, monitoring.Monitoring.RawKpiListOrBuilder> 
+          getRawKpiListsFieldBuilder() {
+        if (rawKpiListsBuilder_ == null) {
+          rawKpiListsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.RawKpiList, monitoring.Monitoring.RawKpiList.Builder, monitoring.Monitoring.RawKpiListOrBuilder>(
+                  rawKpiLists_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          endTimestamp_ = null;
+          rawKpiLists_ = null;
         }
-        return endTimestampBuilder_;
+        return rawKpiListsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -4205,41 +7145,41 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiQuery)
+      // @@protoc_insertion_point(builder_scope:monitoring.RawKpiTable)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiQuery)
-    private static final monitoring.Monitoring.KpiQuery DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.RawKpiTable)
+    private static final monitoring.Monitoring.RawKpiTable DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiQuery();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.RawKpiTable();
     }
 
-    public static monitoring.Monitoring.KpiQuery getDefaultInstance() {
+    public static monitoring.Monitoring.RawKpiTable getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<KpiQuery>
-        PARSER = new com.google.protobuf.AbstractParser<KpiQuery>() {
+    private static final com.google.protobuf.Parser<RawKpiTable>
+        PARSER = new com.google.protobuf.AbstractParser<RawKpiTable>() {
       @java.lang.Override
-      public KpiQuery parsePartialFrom(
+      public RawKpiTable parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiQuery(input, extensionRegistry);
+        return new RawKpiTable(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<KpiQuery> parser() {
+    public static com.google.protobuf.Parser<RawKpiTable> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<KpiQuery> getParserForType() {
+    public com.google.protobuf.Parser<RawKpiTable> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.KpiQuery getDefaultInstanceForType() {
+    public monitoring.Monitoring.RawKpiTable getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
@@ -18321,6 +21261,21 @@ public final class Monitoring {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_monitoring_KpiQuery_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_RawKpi_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_RawKpi_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_RawKpiList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_RawKpiList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_RawKpiTable_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_RawKpiTable_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_monitoring_KpiId_descriptor;
   private static final 
@@ -18406,7 +21361,7 @@ public final class Monitoring {
   static {
     java.lang.String[] descriptorData = {
       "\n\020monitoring.proto\022\nmonitoring\032\rcontext." +
-      "proto\032\026kpi_sample_types.proto\"\311\002\n\rKpiDes" +
+      "proto\032\026kpi_sample_types.proto\"\367\002\n\rKpiDes" +
       "criptor\022!\n\006kpi_id\030\001 \001(\0132\021.monitoring.Kpi" +
       "Id\022\027\n\017kpi_description\030\002 \001(\t\022&\n\013kpi_id_li" +
       "st\030\003 \003(\0132\021.monitoring.KpiId\0228\n\017kpi_sampl" +
@@ -18415,86 +21370,92 @@ public final class Monitoring {
       "eId\022(\n\013endpoint_id\030\006 \001(\0132\023.context.EndPo" +
       "intId\022&\n\nservice_id\030\007 \001(\0132\022.context.Serv" +
       "iceId\022\"\n\010slice_id\030\010 \001(\0132\020.context.SliceI" +
-      "d\"l\n\021MonitorKpiRequest\022!\n\006kpi_id\030\001 \001(\0132\021" +
-      ".monitoring.KpiId\022\033\n\023monitoring_window_s" +
-      "\030\002 \001(\002\022\027\n\017sampling_rate_s\030\003 \001(\002\"\323\001\n\010KpiQ" +
-      "uery\022!\n\006kpi_id\030\001 \001(\0132\021.monitoring.KpiId\022" +
-      "\033\n\023monitoring_window_s\030\002 \001(\002\022\027\n\017sampling" +
-      "_rate_s\030\003 \001(\002\022\026\n\016last_n_samples\030\004 \001(\r\022+\n" +
-      "\017start_timestamp\030\005 \001(\0132\022.context.Timesta" +
-      "mp\022)\n\rend_timestamp\030\006 \001(\0132\022.context.Time" +
-      "stamp\"&\n\005KpiId\022\035\n\006kpi_id\030\001 \001(\0132\r.context" +
-      ".Uuid\"x\n\003Kpi\022!\n\006kpi_id\030\001 \001(\0132\021.monitorin" +
-      "g.KpiId\022%\n\ttimestamp\030\002 \001(\0132\022.context.Tim" +
-      "estamp\022\'\n\tkpi_value\030\003 \001(\0132\024.monitoring.K" +
-      "piValue\"\250\001\n\rKpiValueRange\022)\n\013kpiMinValue" +
-      "\030\001 \001(\0132\024.monitoring.KpiValue\022)\n\013kpiMaxVa" +
-      "lue\030\002 \001(\0132\024.monitoring.KpiValue\022\017\n\007inRan" +
-      "ge\030\003 \001(\010\022\027\n\017includeMinValue\030\004 \001(\010\022\027\n\017inc" +
-      "ludeMaxValue\030\005 \001(\010\"\241\001\n\010KpiValue\022\022\n\010int32" +
-      "Val\030\001 \001(\005H\000\022\023\n\tuint32Val\030\002 \001(\rH\000\022\022\n\010int6" +
-      "4Val\030\003 \001(\003H\000\022\023\n\tuint64Val\030\004 \001(\004H\000\022\022\n\010flo" +
-      "atVal\030\005 \001(\002H\000\022\023\n\tstringVal\030\006 \001(\tH\000\022\021\n\007bo" +
-      "olVal\030\007 \001(\010H\000B\007\n\005value\"\'\n\007KpiList\022\034\n\003kpi" +
-      "\030\001 \003(\0132\017.monitoring.Kpi\"K\n\021KpiDescriptor" +
-      "List\0226\n\023kpi_descriptor_list\030\001 \003(\0132\031.moni" +
-      "toring.KpiDescriptor\"\362\001\n\016SubsDescriptor\022" +
-      "+\n\007subs_id\030\001 \001(\0132\032.monitoring.Subscripti" +
-      "onID\022!\n\006kpi_id\030\002 \001(\0132\021.monitoring.KpiId\022" +
-      "\033\n\023sampling_duration_s\030\003 \001(\002\022\033\n\023sampling" +
-      "_interval_s\030\004 \001(\002\022+\n\017start_timestamp\030\005 \001" +
-      "(\0132\022.context.Timestamp\022)\n\rend_timestamp\030" +
-      "\006 \001(\0132\022.context.Timestamp\"0\n\016Subscriptio" +
-      "nID\022\036\n\007subs_id\030\001 \001(\0132\r.context.Uuid\"b\n\014S" +
-      "ubsResponse\022+\n\007subs_id\030\001 \001(\0132\032.monitorin" +
-      "g.SubscriptionID\022%\n\010kpi_list\030\002 \001(\0132\023.mon" +
-      "itoring.KpiList\"?\n\010SubsList\0223\n\017subs_desc" +
-      "riptor\030\001 \003(\0132\032.monitoring.SubsDescriptor" +
-      "\"\337\001\n\017AlarmDescriptor\022%\n\010alarm_id\030\001 \001(\0132\023" +
-      ".monitoring.AlarmID\022\031\n\021alarm_description" +
-      "\030\002 \001(\t\022\014\n\004name\030\003 \001(\t\022!\n\006kpi_id\030\004 \001(\0132\021.m" +
-      "onitoring.KpiId\0222\n\017kpi_value_range\030\005 \001(\013" +
-      "2\031.monitoring.KpiValueRange\022%\n\ttimestamp" +
-      "\030\006 \001(\0132\022.context.Timestamp\"*\n\007AlarmID\022\037\n" +
-      "\010alarm_id\030\001 \001(\0132\r.context.Uuid\"}\n\021AlarmS" +
-      "ubscription\022%\n\010alarm_id\030\001 \001(\0132\023.monitori" +
-      "ng.AlarmID\022\036\n\026subscription_timeout_s\030\002 \001" +
-      "(\002\022!\n\031subscription_frequency_ms\030\003 \001(\002\"k\n" +
-      "\rAlarmResponse\022%\n\010alarm_id\030\001 \001(\0132\023.monit" +
-      "oring.AlarmID\022\014\n\004text\030\002 \001(\t\022%\n\010kpi_list\030" +
-      "\003 \001(\0132\023.monitoring.KpiList\"B\n\tAlarmList\022" +
-      "5\n\020alarm_descriptor\030\001 \003(\0132\033.monitoring.A" +
-      "larmDescriptor2\230\t\n\021MonitoringService\0228\n\006" +
-      "SetKpi\022\031.monitoring.KpiDescriptor\032\021.moni" +
-      "toring.KpiId\"\000\0220\n\tDeleteKpi\022\021.monitoring" +
-      ".KpiId\032\016.context.Empty\"\000\022B\n\020GetKpiDescri" +
-      "ptor\022\021.monitoring.KpiId\032\031.monitoring.Kpi" +
-      "Descriptor\"\000\022G\n\024GetKpiDescriptorList\022\016.c" +
-      "ontext.Empty\032\035.monitoring.KpiDescriptorL" +
-      "ist\"\000\022/\n\nIncludeKpi\022\017.monitoring.Kpi\032\016.c" +
-      "ontext.Empty\"\000\022=\n\nMonitorKpi\022\035.monitorin" +
-      "g.MonitorKpiRequest\032\016.context.Empty\"\000\022;\n" +
-      "\014QueryKpiData\022\024.monitoring.KpiQuery\032\023.mo" +
-      "nitoring.KpiList\"\000\022N\n\022SetKpiSubscription" +
-      "\022\032.monitoring.SubsDescriptor\032\030.monitorin" +
-      "g.SubsResponse\"\0000\001\022M\n\021GetSubsDescriptor\022" +
-      "\032.monitoring.SubscriptionID\032\032.monitoring" +
-      ".SubsDescriptor\"\000\022:\n\020GetSubscriptions\022\016." +
-      "context.Empty\032\024.monitoring.SubsList\"\000\022B\n" +
-      "\022DeleteSubscription\022\032.monitoring.Subscri" +
-      "ptionID\032\016.context.Empty\"\000\022A\n\013SetKpiAlarm" +
-      "\022\033.monitoring.AlarmDescriptor\032\023.monitori" +
-      "ng.AlarmID\"\000\0224\n\tGetAlarms\022\016.context.Empt" +
-      "y\032\025.monitoring.AlarmList\"\000\022H\n\022GetAlarmDe" +
-      "scriptor\022\023.monitoring.AlarmID\032\033.monitori" +
-      "ng.AlarmDescriptor\"\000\022V\n\026GetAlarmResponse" +
-      "Stream\022\035.monitoring.AlarmSubscription\032\031." +
-      "monitoring.AlarmResponse\"\0000\001\0224\n\013DeleteAl" +
-      "arm\022\023.monitoring.AlarmID\032\016.context.Empty" +
-      "\"\000\0226\n\014GetStreamKpi\022\021.monitoring.KpiId\032\017." +
-      "monitoring.Kpi\"\0000\001\0225\n\rGetInstantKpi\022\021.mo" +
-      "nitoring.KpiId\032\017.monitoring.Kpi\"\000b\006proto" +
-      "3"
+      "d\022,\n\rconnection_id\030\t \001(\0132\025.context.Conne" +
+      "ctionId\"l\n\021MonitorKpiRequest\022!\n\006kpi_id\030\001" +
+      " \001(\0132\021.monitoring.KpiId\022\033\n\023monitoring_wi" +
+      "ndow_s\030\002 \001(\002\022\027\n\017sampling_rate_s\030\003 \001(\002\"\273\001" +
+      "\n\010KpiQuery\022\"\n\007kpi_ids\030\001 \003(\0132\021.monitoring" +
+      ".KpiId\022\033\n\023monitoring_window_s\030\002 \001(\002\022\026\n\016l" +
+      "ast_n_samples\030\003 \001(\r\022+\n\017start_timestamp\030\004" +
+      " \001(\0132\022.context.Timestamp\022)\n\rend_timestam" +
+      "p\030\005 \001(\0132\022.context.Timestamp\"X\n\006RawKpi\022%\n" +
+      "\ttimestamp\030\001 \001(\0132\022.context.Timestamp\022\'\n\t" +
+      "kpi_value\030\002 \001(\0132\024.monitoring.KpiValue\"U\n" +
+      "\nRawKpiList\022!\n\006kpi_id\030\001 \001(\0132\021.monitoring" +
+      ".KpiId\022$\n\010raw_kpis\030\002 \003(\0132\022.monitoring.Ra" +
+      "wKpi\"<\n\013RawKpiTable\022-\n\rraw_kpi_lists\030\001 \003" +
+      "(\0132\026.monitoring.RawKpiList\"&\n\005KpiId\022\035\n\006k" +
+      "pi_id\030\001 \001(\0132\r.context.Uuid\"x\n\003Kpi\022!\n\006kpi" +
+      "_id\030\001 \001(\0132\021.monitoring.KpiId\022%\n\ttimestam" +
+      "p\030\002 \001(\0132\022.context.Timestamp\022\'\n\tkpi_value" +
+      "\030\003 \001(\0132\024.monitoring.KpiValue\"\250\001\n\rKpiValu" +
+      "eRange\022)\n\013kpiMinValue\030\001 \001(\0132\024.monitoring" +
+      ".KpiValue\022)\n\013kpiMaxValue\030\002 \001(\0132\024.monitor" +
+      "ing.KpiValue\022\017\n\007inRange\030\003 \001(\010\022\027\n\017include" +
+      "MinValue\030\004 \001(\010\022\027\n\017includeMaxValue\030\005 \001(\010\"" +
+      "\241\001\n\010KpiValue\022\022\n\010int32Val\030\001 \001(\005H\000\022\023\n\tuint" +
+      "32Val\030\002 \001(\rH\000\022\022\n\010int64Val\030\003 \001(\003H\000\022\023\n\tuin" +
+      "t64Val\030\004 \001(\004H\000\022\022\n\010floatVal\030\005 \001(\002H\000\022\023\n\tst" +
+      "ringVal\030\006 \001(\tH\000\022\021\n\007boolVal\030\007 \001(\010H\000B\007\n\005va" +
+      "lue\"\'\n\007KpiList\022\034\n\003kpi\030\001 \003(\0132\017.monitoring" +
+      ".Kpi\"K\n\021KpiDescriptorList\0226\n\023kpi_descrip" +
+      "tor_list\030\001 \003(\0132\031.monitoring.KpiDescripto" +
+      "r\"\362\001\n\016SubsDescriptor\022+\n\007subs_id\030\001 \001(\0132\032." +
+      "monitoring.SubscriptionID\022!\n\006kpi_id\030\002 \001(" +
+      "\0132\021.monitoring.KpiId\022\033\n\023sampling_duratio" +
+      "n_s\030\003 \001(\002\022\033\n\023sampling_interval_s\030\004 \001(\002\022+" +
+      "\n\017start_timestamp\030\005 \001(\0132\022.context.Timest" +
+      "amp\022)\n\rend_timestamp\030\006 \001(\0132\022.context.Tim" +
+      "estamp\"0\n\016SubscriptionID\022\036\n\007subs_id\030\001 \001(" +
+      "\0132\r.context.Uuid\"b\n\014SubsResponse\022+\n\007subs" +
+      "_id\030\001 \001(\0132\032.monitoring.SubscriptionID\022%\n" +
+      "\010kpi_list\030\002 \001(\0132\023.monitoring.KpiList\"?\n\010" +
+      "SubsList\0223\n\017subs_descriptor\030\001 \003(\0132\032.moni" +
+      "toring.SubsDescriptor\"\337\001\n\017AlarmDescripto" +
+      "r\022%\n\010alarm_id\030\001 \001(\0132\023.monitoring.AlarmID" +
+      "\022\031\n\021alarm_description\030\002 \001(\t\022\014\n\004name\030\003 \001(" +
+      "\t\022!\n\006kpi_id\030\004 \001(\0132\021.monitoring.KpiId\0222\n\017" +
+      "kpi_value_range\030\005 \001(\0132\031.monitoring.KpiVa" +
+      "lueRange\022%\n\ttimestamp\030\006 \001(\0132\022.context.Ti" +
+      "mestamp\"*\n\007AlarmID\022\037\n\010alarm_id\030\001 \001(\0132\r.c" +
+      "ontext.Uuid\"}\n\021AlarmSubscription\022%\n\010alar" +
+      "m_id\030\001 \001(\0132\023.monitoring.AlarmID\022\036\n\026subsc" +
+      "ription_timeout_s\030\002 \001(\002\022!\n\031subscription_" +
+      "frequency_ms\030\003 \001(\002\"k\n\rAlarmResponse\022%\n\010a" +
+      "larm_id\030\001 \001(\0132\023.monitoring.AlarmID\022\014\n\004te" +
+      "xt\030\002 \001(\t\022%\n\010kpi_list\030\003 \001(\0132\023.monitoring." +
+      "KpiList\"B\n\tAlarmList\0225\n\020alarm_descriptor" +
+      "\030\001 \003(\0132\033.monitoring.AlarmDescriptor2\234\t\n\021" +
+      "MonitoringService\0228\n\006SetKpi\022\031.monitoring" +
+      ".KpiDescriptor\032\021.monitoring.KpiId\"\000\0220\n\tD" +
+      "eleteKpi\022\021.monitoring.KpiId\032\016.context.Em" +
+      "pty\"\000\022B\n\020GetKpiDescriptor\022\021.monitoring.K" +
+      "piId\032\031.monitoring.KpiDescriptor\"\000\022G\n\024Get" +
+      "KpiDescriptorList\022\016.context.Empty\032\035.moni" +
+      "toring.KpiDescriptorList\"\000\022/\n\nIncludeKpi" +
+      "\022\017.monitoring.Kpi\032\016.context.Empty\"\000\022=\n\nM" +
+      "onitorKpi\022\035.monitoring.MonitorKpiRequest" +
+      "\032\016.context.Empty\"\000\022?\n\014QueryKpiData\022\024.mon" +
+      "itoring.KpiQuery\032\027.monitoring.RawKpiTabl" +
+      "e\"\000\022N\n\022SetKpiSubscription\022\032.monitoring.S" +
+      "ubsDescriptor\032\030.monitoring.SubsResponse\"" +
+      "\0000\001\022M\n\021GetSubsDescriptor\022\032.monitoring.Su" +
+      "bscriptionID\032\032.monitoring.SubsDescriptor" +
+      "\"\000\022:\n\020GetSubscriptions\022\016.context.Empty\032\024" +
+      ".monitoring.SubsList\"\000\022B\n\022DeleteSubscrip" +
+      "tion\022\032.monitoring.SubscriptionID\032\016.conte" +
+      "xt.Empty\"\000\022A\n\013SetKpiAlarm\022\033.monitoring.A" +
+      "larmDescriptor\032\023.monitoring.AlarmID\"\000\0224\n" +
+      "\tGetAlarms\022\016.context.Empty\032\025.monitoring." +
+      "AlarmList\"\000\022H\n\022GetAlarmDescriptor\022\023.moni" +
+      "toring.AlarmID\032\033.monitoring.AlarmDescrip" +
+      "tor\"\000\022V\n\026GetAlarmResponseStream\022\035.monito" +
+      "ring.AlarmSubscription\032\031.monitoring.Alar" +
+      "mResponse\"\0000\001\0224\n\013DeleteAlarm\022\023.monitorin" +
+      "g.AlarmID\032\016.context.Empty\"\000\0226\n\014GetStream" +
+      "Kpi\022\021.monitoring.KpiId\032\017.monitoring.Kpi\"" +
+      "\0000\001\0225\n\rGetInstantKpi\022\021.monitoring.KpiId\032" +
+      "\017.monitoring.Kpi\"\000b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -18507,7 +21468,7 @@ public final class Monitoring {
     internal_static_monitoring_KpiDescriptor_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiDescriptor_descriptor,
-        new java.lang.String[] { "KpiId", "KpiDescription", "KpiIdList", "KpiSampleType", "DeviceId", "EndpointId", "ServiceId", "SliceId", });
+        new java.lang.String[] { "KpiId", "KpiDescription", "KpiIdList", "KpiSampleType", "DeviceId", "EndpointId", "ServiceId", "SliceId", "ConnectionId", });
     internal_static_monitoring_MonitorKpiRequest_descriptor =
       getDescriptor().getMessageTypes().get(1);
     internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable = new
@@ -18519,93 +21480,111 @@ public final class Monitoring {
     internal_static_monitoring_KpiQuery_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiQuery_descriptor,
-        new java.lang.String[] { "KpiId", "MonitoringWindowS", "SamplingRateS", "LastNSamples", "StartTimestamp", "EndTimestamp", });
-    internal_static_monitoring_KpiId_descriptor =
+        new java.lang.String[] { "KpiIds", "MonitoringWindowS", "LastNSamples", "StartTimestamp", "EndTimestamp", });
+    internal_static_monitoring_RawKpi_descriptor =
       getDescriptor().getMessageTypes().get(3);
+    internal_static_monitoring_RawKpi_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_RawKpi_descriptor,
+        new java.lang.String[] { "Timestamp", "KpiValue", });
+    internal_static_monitoring_RawKpiList_descriptor =
+      getDescriptor().getMessageTypes().get(4);
+    internal_static_monitoring_RawKpiList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_RawKpiList_descriptor,
+        new java.lang.String[] { "KpiId", "RawKpis", });
+    internal_static_monitoring_RawKpiTable_descriptor =
+      getDescriptor().getMessageTypes().get(5);
+    internal_static_monitoring_RawKpiTable_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_RawKpiTable_descriptor,
+        new java.lang.String[] { "RawKpiLists", });
+    internal_static_monitoring_KpiId_descriptor =
+      getDescriptor().getMessageTypes().get(6);
     internal_static_monitoring_KpiId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiId_descriptor,
         new java.lang.String[] { "KpiId", });
     internal_static_monitoring_Kpi_descriptor =
-      getDescriptor().getMessageTypes().get(4);
+      getDescriptor().getMessageTypes().get(7);
     internal_static_monitoring_Kpi_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_Kpi_descriptor,
         new java.lang.String[] { "KpiId", "Timestamp", "KpiValue", });
     internal_static_monitoring_KpiValueRange_descriptor =
-      getDescriptor().getMessageTypes().get(5);
+      getDescriptor().getMessageTypes().get(8);
     internal_static_monitoring_KpiValueRange_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiValueRange_descriptor,
         new java.lang.String[] { "KpiMinValue", "KpiMaxValue", "InRange", "IncludeMinValue", "IncludeMaxValue", });
     internal_static_monitoring_KpiValue_descriptor =
-      getDescriptor().getMessageTypes().get(6);
+      getDescriptor().getMessageTypes().get(9);
     internal_static_monitoring_KpiValue_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiValue_descriptor,
         new java.lang.String[] { "Int32Val", "Uint32Val", "Int64Val", "Uint64Val", "FloatVal", "StringVal", "BoolVal", "Value", });
     internal_static_monitoring_KpiList_descriptor =
-      getDescriptor().getMessageTypes().get(7);
+      getDescriptor().getMessageTypes().get(10);
     internal_static_monitoring_KpiList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiList_descriptor,
         new java.lang.String[] { "Kpi", });
     internal_static_monitoring_KpiDescriptorList_descriptor =
-      getDescriptor().getMessageTypes().get(8);
+      getDescriptor().getMessageTypes().get(11);
     internal_static_monitoring_KpiDescriptorList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiDescriptorList_descriptor,
         new java.lang.String[] { "KpiDescriptorList", });
     internal_static_monitoring_SubsDescriptor_descriptor =
-      getDescriptor().getMessageTypes().get(9);
+      getDescriptor().getMessageTypes().get(12);
     internal_static_monitoring_SubsDescriptor_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_SubsDescriptor_descriptor,
         new java.lang.String[] { "SubsId", "KpiId", "SamplingDurationS", "SamplingIntervalS", "StartTimestamp", "EndTimestamp", });
     internal_static_monitoring_SubscriptionID_descriptor =
-      getDescriptor().getMessageTypes().get(10);
+      getDescriptor().getMessageTypes().get(13);
     internal_static_monitoring_SubscriptionID_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_SubscriptionID_descriptor,
         new java.lang.String[] { "SubsId", });
     internal_static_monitoring_SubsResponse_descriptor =
-      getDescriptor().getMessageTypes().get(11);
+      getDescriptor().getMessageTypes().get(14);
     internal_static_monitoring_SubsResponse_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_SubsResponse_descriptor,
         new java.lang.String[] { "SubsId", "KpiList", });
     internal_static_monitoring_SubsList_descriptor =
-      getDescriptor().getMessageTypes().get(12);
+      getDescriptor().getMessageTypes().get(15);
     internal_static_monitoring_SubsList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_SubsList_descriptor,
         new java.lang.String[] { "SubsDescriptor", });
     internal_static_monitoring_AlarmDescriptor_descriptor =
-      getDescriptor().getMessageTypes().get(13);
+      getDescriptor().getMessageTypes().get(16);
     internal_static_monitoring_AlarmDescriptor_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_AlarmDescriptor_descriptor,
         new java.lang.String[] { "AlarmId", "AlarmDescription", "Name", "KpiId", "KpiValueRange", "Timestamp", });
     internal_static_monitoring_AlarmID_descriptor =
-      getDescriptor().getMessageTypes().get(14);
+      getDescriptor().getMessageTypes().get(17);
     internal_static_monitoring_AlarmID_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_AlarmID_descriptor,
         new java.lang.String[] { "AlarmId", });
     internal_static_monitoring_AlarmSubscription_descriptor =
-      getDescriptor().getMessageTypes().get(15);
+      getDescriptor().getMessageTypes().get(18);
     internal_static_monitoring_AlarmSubscription_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_AlarmSubscription_descriptor,
         new java.lang.String[] { "AlarmId", "SubscriptionTimeoutS", "SubscriptionFrequencyMs", });
     internal_static_monitoring_AlarmResponse_descriptor =
-      getDescriptor().getMessageTypes().get(16);
+      getDescriptor().getMessageTypes().get(19);
     internal_static_monitoring_AlarmResponse_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_AlarmResponse_descriptor,
         new java.lang.String[] { "AlarmId", "Text", "KpiList", });
     internal_static_monitoring_AlarmList_descriptor =
-      getDescriptor().getMessageTypes().get(17);
+      getDescriptor().getMessageTypes().get(20);
     internal_static_monitoring_AlarmList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_AlarmList_descriptor,
diff --git a/src/policy/target/generated-sources/grpc/monitoring/MonitoringService.java b/src/policy/target/generated-sources/grpc/monitoring/MonitoringService.java
index e43e9174c6eee81e5c5faf4a2d3049848f01b041..0ce30559b2c0a1bb6236431482d6b99b82cf0842 100644
--- a/src/policy/target/generated-sources/grpc/monitoring/MonitoringService.java
+++ b/src/policy/target/generated-sources/grpc/monitoring/MonitoringService.java
@@ -20,7 +20,7 @@ public interface MonitoringService extends MutinyService {
     
     io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> monitorKpi(monitoring.Monitoring.MonitorKpiRequest request);
     
-    io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request);
+    io.smallrye.mutiny.Uni<monitoring.Monitoring.RawKpiTable> queryKpiData(monitoring.Monitoring.KpiQuery request);
     
     io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(monitoring.Monitoring.SubscriptionID request);
     
diff --git a/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java b/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java
index 83c1b9cd108886f5b54248c5c9861ec9f5c2fabf..cbc984e7132bdbf22c9b99a510106c5c6f4cbda7 100644
--- a/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java
+++ b/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java
@@ -64,7 +64,7 @@ public class MonitoringServiceBean extends MutinyMonitoringServiceGrpc.Monitorin
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.RawKpiTable> queryKpiData(monitoring.Monitoring.KpiQuery request) {
        try {
          return delegate.queryKpiData(request);
        } catch (UnsupportedOperationException e) {
diff --git a/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java b/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java
index fc16b2b9bfb19c27fd6ff593e4d2311017b9286b..0e8ff5d1b8929694b49548984cd7d53f9c8f68a4 100644
--- a/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java
+++ b/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java
@@ -45,7 +45,7 @@ public class MonitoringServiceClient implements MonitoringService, MutinyClient<
        return stub.monitorKpi(request);
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.RawKpiTable> queryKpiData(monitoring.Monitoring.KpiQuery request) {
        return stub.queryKpiData(request);
     }
     @Override
diff --git a/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java b/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java
index 9f3d85f72f78afca40e60c7439c84b61b1976d55..c5f55b3b44c03ea8f5377ce11e3c3e547da5ef06 100644
--- a/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java
+++ b/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java
@@ -201,28 +201,28 @@ public final class MonitoringServiceGrpc {
   }
 
   private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiQuery,
-      monitoring.Monitoring.KpiList> getQueryKpiDataMethod;
+      monitoring.Monitoring.RawKpiTable> getQueryKpiDataMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
       fullMethodName = SERVICE_NAME + '/' + "QueryKpiData",
       requestType = monitoring.Monitoring.KpiQuery.class,
-      responseType = monitoring.Monitoring.KpiList.class,
+      responseType = monitoring.Monitoring.RawKpiTable.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
   public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiQuery,
-      monitoring.Monitoring.KpiList> getQueryKpiDataMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiQuery, monitoring.Monitoring.KpiList> getQueryKpiDataMethod;
+      monitoring.Monitoring.RawKpiTable> getQueryKpiDataMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiQuery, monitoring.Monitoring.RawKpiTable> getQueryKpiDataMethod;
     if ((getQueryKpiDataMethod = MonitoringServiceGrpc.getQueryKpiDataMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
         if ((getQueryKpiDataMethod = MonitoringServiceGrpc.getQueryKpiDataMethod) == null) {
           MonitoringServiceGrpc.getQueryKpiDataMethod = getQueryKpiDataMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiQuery, monitoring.Monitoring.KpiList>newBuilder()
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiQuery, monitoring.Monitoring.RawKpiTable>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
               .setFullMethodName(generateFullMethodName(SERVICE_NAME, "QueryKpiData"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   monitoring.Monitoring.KpiQuery.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.KpiList.getDefaultInstance()))
+                  monitoring.Monitoring.RawKpiTable.getDefaultInstance()))
               .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("QueryKpiData"))
               .build();
         }
@@ -665,7 +665,7 @@ public final class MonitoringServiceGrpc {
     /**
      */
     public void queryKpiData(monitoring.Monitoring.KpiQuery request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList> responseObserver) {
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.RawKpiTable> responseObserver) {
       io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getQueryKpiDataMethod(), responseObserver);
     }
 
@@ -795,7 +795,7 @@ public final class MonitoringServiceGrpc {
             io.grpc.stub.ServerCalls.asyncUnaryCall(
               new MethodHandlers<
                 monitoring.Monitoring.KpiQuery,
-                monitoring.Monitoring.KpiList>(
+                monitoring.Monitoring.RawKpiTable>(
                   this, METHODID_QUERY_KPI_DATA)))
           .addMethod(
             getSetKpiSubscriptionMethod(),
@@ -943,7 +943,7 @@ public final class MonitoringServiceGrpc {
     /**
      */
     public void queryKpiData(monitoring.Monitoring.KpiQuery request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList> responseObserver) {
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.RawKpiTable> responseObserver) {
       io.grpc.stub.ClientCalls.asyncUnaryCall(
           getChannel().newCall(getQueryKpiDataMethod(), getCallOptions()), request, responseObserver);
     }
@@ -1095,7 +1095,7 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public monitoring.Monitoring.KpiList queryKpiData(monitoring.Monitoring.KpiQuery request) {
+    public monitoring.Monitoring.RawKpiTable queryKpiData(monitoring.Monitoring.KpiQuery request) {
       return io.grpc.stub.ClientCalls.blockingUnaryCall(
           getChannel(), getQueryKpiDataMethod(), getCallOptions(), request);
     }
@@ -1245,7 +1245,7 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiList> queryKpiData(
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.RawKpiTable> queryKpiData(
         monitoring.Monitoring.KpiQuery request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
           getChannel().newCall(getQueryKpiDataMethod(), getCallOptions()), request);
@@ -1378,7 +1378,7 @@ public final class MonitoringServiceGrpc {
           break;
         case METHODID_QUERY_KPI_DATA:
           serviceImpl.queryKpiData((monitoring.Monitoring.KpiQuery) request,
-              (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver);
+              (io.grpc.stub.StreamObserver<monitoring.Monitoring.RawKpiTable>) responseObserver);
           break;
         case METHODID_SET_KPI_SUBSCRIPTION:
           serviceImpl.setKpiSubscription((monitoring.Monitoring.SubsDescriptor) request,
diff --git a/src/policy/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java b/src/policy/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java
index 8f066682b996e236be1d14cc65b80d1b8984804f..f045ecc7ed434ba90bdfda065f18e0d839850a76 100644
--- a/src/policy/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java
+++ b/src/policy/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java
@@ -66,7 +66,7 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.RawKpiTable> queryKpiData(monitoring.Monitoring.KpiQuery request) {
             return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::queryKpiData);
         }
 
@@ -173,7 +173,7 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.RawKpiTable> queryKpiData(monitoring.Monitoring.KpiQuery request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
@@ -281,7 +281,7 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                             asyncUnaryCall(
                                     new MethodHandlers<
                                             monitoring.Monitoring.KpiQuery,
-                                            monitoring.Monitoring.KpiList>(
+                                            monitoring.Monitoring.RawKpiTable>(
                                             this, METHODID_QUERY_KPI_DATA, compression)))
                     .addMethod(
                             monitoring.MonitoringServiceGrpc.getSetKpiSubscriptionMethod(),
@@ -440,7 +440,7 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                     break;
                 case METHODID_QUERY_KPI_DATA:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiQuery) request,
-                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.RawKpiTable>) responseObserver,
                             compression,
                             serviceImpl::queryKpiData);
                     break;
diff --git a/src/policy/target/generated-sources/grpc/policy/Policy.java b/src/policy/target/generated-sources/grpc/policy/Policy.java
index 0fb9c004aba385973770c0f0c448b60341f7e63c..505c0d7ff98d573e67f8cf39b399ec8ab9b30b68 100644
--- a/src/policy/target/generated-sources/grpc/policy/Policy.java
+++ b/src/policy/target/generated-sources/grpc/policy/Policy.java
@@ -9641,27 +9641,27 @@ public final class Policy {
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+     * <code>repeated .policy.PolicyRule policyRules = 1;</code>
      */
-    java.util.List<policy.Policy.PolicyRuleId> 
+    java.util.List<policy.Policy.PolicyRule> 
         getPolicyRulesList();
     /**
-     * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+     * <code>repeated .policy.PolicyRule policyRules = 1;</code>
      */
-    policy.Policy.PolicyRuleId getPolicyRules(int index);
+    policy.Policy.PolicyRule getPolicyRules(int index);
     /**
-     * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+     * <code>repeated .policy.PolicyRule policyRules = 1;</code>
      */
     int getPolicyRulesCount();
     /**
-     * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+     * <code>repeated .policy.PolicyRule policyRules = 1;</code>
      */
-    java.util.List<? extends policy.Policy.PolicyRuleIdOrBuilder> 
+    java.util.List<? extends policy.Policy.PolicyRuleOrBuilder> 
         getPolicyRulesOrBuilderList();
     /**
-     * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+     * <code>repeated .policy.PolicyRule policyRules = 1;</code>
      */
-    policy.Policy.PolicyRuleIdOrBuilder getPolicyRulesOrBuilder(
+    policy.Policy.PolicyRuleOrBuilder getPolicyRulesOrBuilder(
         int index);
   }
   /**
@@ -9717,11 +9717,11 @@ public final class Policy {
               break;
             case 10: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                policyRules_ = new java.util.ArrayList<policy.Policy.PolicyRuleId>();
+                policyRules_ = new java.util.ArrayList<policy.Policy.PolicyRule>();
                 mutable_bitField0_ |= 0x00000001;
               }
               policyRules_.add(
-                  input.readMessage(policy.Policy.PolicyRuleId.parser(), extensionRegistry));
+                  input.readMessage(policy.Policy.PolicyRule.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -9760,41 +9760,41 @@ public final class Policy {
     }
 
     public static final int POLICYRULES_FIELD_NUMBER = 1;
-    private java.util.List<policy.Policy.PolicyRuleId> policyRules_;
+    private java.util.List<policy.Policy.PolicyRule> policyRules_;
     /**
-     * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+     * <code>repeated .policy.PolicyRule policyRules = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<policy.Policy.PolicyRuleId> getPolicyRulesList() {
+    public java.util.List<policy.Policy.PolicyRule> getPolicyRulesList() {
       return policyRules_;
     }
     /**
-     * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+     * <code>repeated .policy.PolicyRule policyRules = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends policy.Policy.PolicyRuleIdOrBuilder> 
+    public java.util.List<? extends policy.Policy.PolicyRuleOrBuilder> 
         getPolicyRulesOrBuilderList() {
       return policyRules_;
     }
     /**
-     * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+     * <code>repeated .policy.PolicyRule policyRules = 1;</code>
      */
     @java.lang.Override
     public int getPolicyRulesCount() {
       return policyRules_.size();
     }
     /**
-     * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+     * <code>repeated .policy.PolicyRule policyRules = 1;</code>
      */
     @java.lang.Override
-    public policy.Policy.PolicyRuleId getPolicyRules(int index) {
+    public policy.Policy.PolicyRule getPolicyRules(int index) {
       return policyRules_.get(index);
     }
     /**
-     * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+     * <code>repeated .policy.PolicyRule policyRules = 1;</code>
      */
     @java.lang.Override
-    public policy.Policy.PolicyRuleIdOrBuilder getPolicyRulesOrBuilder(
+    public policy.Policy.PolicyRuleOrBuilder getPolicyRulesOrBuilder(
         int index) {
       return policyRules_.get(index);
     }
@@ -10145,22 +10145,22 @@ public final class Policy {
       }
       private int bitField0_;
 
-      private java.util.List<policy.Policy.PolicyRuleId> policyRules_ =
+      private java.util.List<policy.Policy.PolicyRule> policyRules_ =
         java.util.Collections.emptyList();
       private void ensurePolicyRulesIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          policyRules_ = new java.util.ArrayList<policy.Policy.PolicyRuleId>(policyRules_);
+          policyRules_ = new java.util.ArrayList<policy.Policy.PolicyRule>(policyRules_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          policy.Policy.PolicyRuleId, policy.Policy.PolicyRuleId.Builder, policy.Policy.PolicyRuleIdOrBuilder> policyRulesBuilder_;
+          policy.Policy.PolicyRule, policy.Policy.PolicyRule.Builder, policy.Policy.PolicyRuleOrBuilder> policyRulesBuilder_;
 
       /**
-       * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+       * <code>repeated .policy.PolicyRule policyRules = 1;</code>
        */
-      public java.util.List<policy.Policy.PolicyRuleId> getPolicyRulesList() {
+      public java.util.List<policy.Policy.PolicyRule> getPolicyRulesList() {
         if (policyRulesBuilder_ == null) {
           return java.util.Collections.unmodifiableList(policyRules_);
         } else {
@@ -10168,7 +10168,7 @@ public final class Policy {
         }
       }
       /**
-       * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+       * <code>repeated .policy.PolicyRule policyRules = 1;</code>
        */
       public int getPolicyRulesCount() {
         if (policyRulesBuilder_ == null) {
@@ -10178,9 +10178,9 @@ public final class Policy {
         }
       }
       /**
-       * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+       * <code>repeated .policy.PolicyRule policyRules = 1;</code>
        */
-      public policy.Policy.PolicyRuleId getPolicyRules(int index) {
+      public policy.Policy.PolicyRule getPolicyRules(int index) {
         if (policyRulesBuilder_ == null) {
           return policyRules_.get(index);
         } else {
@@ -10188,10 +10188,10 @@ public final class Policy {
         }
       }
       /**
-       * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+       * <code>repeated .policy.PolicyRule policyRules = 1;</code>
        */
       public Builder setPolicyRules(
-          int index, policy.Policy.PolicyRuleId value) {
+          int index, policy.Policy.PolicyRule value) {
         if (policyRulesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
@@ -10205,10 +10205,10 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+       * <code>repeated .policy.PolicyRule policyRules = 1;</code>
        */
       public Builder setPolicyRules(
-          int index, policy.Policy.PolicyRuleId.Builder builderForValue) {
+          int index, policy.Policy.PolicyRule.Builder builderForValue) {
         if (policyRulesBuilder_ == null) {
           ensurePolicyRulesIsMutable();
           policyRules_.set(index, builderForValue.build());
@@ -10219,9 +10219,9 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+       * <code>repeated .policy.PolicyRule policyRules = 1;</code>
        */
-      public Builder addPolicyRules(policy.Policy.PolicyRuleId value) {
+      public Builder addPolicyRules(policy.Policy.PolicyRule value) {
         if (policyRulesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
@@ -10235,10 +10235,10 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+       * <code>repeated .policy.PolicyRule policyRules = 1;</code>
        */
       public Builder addPolicyRules(
-          int index, policy.Policy.PolicyRuleId value) {
+          int index, policy.Policy.PolicyRule value) {
         if (policyRulesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
@@ -10252,10 +10252,10 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+       * <code>repeated .policy.PolicyRule policyRules = 1;</code>
        */
       public Builder addPolicyRules(
-          policy.Policy.PolicyRuleId.Builder builderForValue) {
+          policy.Policy.PolicyRule.Builder builderForValue) {
         if (policyRulesBuilder_ == null) {
           ensurePolicyRulesIsMutable();
           policyRules_.add(builderForValue.build());
@@ -10266,10 +10266,10 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+       * <code>repeated .policy.PolicyRule policyRules = 1;</code>
        */
       public Builder addPolicyRules(
-          int index, policy.Policy.PolicyRuleId.Builder builderForValue) {
+          int index, policy.Policy.PolicyRule.Builder builderForValue) {
         if (policyRulesBuilder_ == null) {
           ensurePolicyRulesIsMutable();
           policyRules_.add(index, builderForValue.build());
@@ -10280,10 +10280,10 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+       * <code>repeated .policy.PolicyRule policyRules = 1;</code>
        */
       public Builder addAllPolicyRules(
-          java.lang.Iterable<? extends policy.Policy.PolicyRuleId> values) {
+          java.lang.Iterable<? extends policy.Policy.PolicyRule> values) {
         if (policyRulesBuilder_ == null) {
           ensurePolicyRulesIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
@@ -10295,7 +10295,7 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+       * <code>repeated .policy.PolicyRule policyRules = 1;</code>
        */
       public Builder clearPolicyRules() {
         if (policyRulesBuilder_ == null) {
@@ -10308,7 +10308,7 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+       * <code>repeated .policy.PolicyRule policyRules = 1;</code>
        */
       public Builder removePolicyRules(int index) {
         if (policyRulesBuilder_ == null) {
@@ -10321,16 +10321,16 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+       * <code>repeated .policy.PolicyRule policyRules = 1;</code>
        */
-      public policy.Policy.PolicyRuleId.Builder getPolicyRulesBuilder(
+      public policy.Policy.PolicyRule.Builder getPolicyRulesBuilder(
           int index) {
         return getPolicyRulesFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+       * <code>repeated .policy.PolicyRule policyRules = 1;</code>
        */
-      public policy.Policy.PolicyRuleIdOrBuilder getPolicyRulesOrBuilder(
+      public policy.Policy.PolicyRuleOrBuilder getPolicyRulesOrBuilder(
           int index) {
         if (policyRulesBuilder_ == null) {
           return policyRules_.get(index);  } else {
@@ -10338,9 +10338,9 @@ public final class Policy {
         }
       }
       /**
-       * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+       * <code>repeated .policy.PolicyRule policyRules = 1;</code>
        */
-      public java.util.List<? extends policy.Policy.PolicyRuleIdOrBuilder> 
+      public java.util.List<? extends policy.Policy.PolicyRuleOrBuilder> 
            getPolicyRulesOrBuilderList() {
         if (policyRulesBuilder_ != null) {
           return policyRulesBuilder_.getMessageOrBuilderList();
@@ -10349,33 +10349,33 @@ public final class Policy {
         }
       }
       /**
-       * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+       * <code>repeated .policy.PolicyRule policyRules = 1;</code>
        */
-      public policy.Policy.PolicyRuleId.Builder addPolicyRulesBuilder() {
+      public policy.Policy.PolicyRule.Builder addPolicyRulesBuilder() {
         return getPolicyRulesFieldBuilder().addBuilder(
-            policy.Policy.PolicyRuleId.getDefaultInstance());
+            policy.Policy.PolicyRule.getDefaultInstance());
       }
       /**
-       * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+       * <code>repeated .policy.PolicyRule policyRules = 1;</code>
        */
-      public policy.Policy.PolicyRuleId.Builder addPolicyRulesBuilder(
+      public policy.Policy.PolicyRule.Builder addPolicyRulesBuilder(
           int index) {
         return getPolicyRulesFieldBuilder().addBuilder(
-            index, policy.Policy.PolicyRuleId.getDefaultInstance());
+            index, policy.Policy.PolicyRule.getDefaultInstance());
       }
       /**
-       * <code>repeated .policy.PolicyRuleId policyRules = 1;</code>
+       * <code>repeated .policy.PolicyRule policyRules = 1;</code>
        */
-      public java.util.List<policy.Policy.PolicyRuleId.Builder> 
+      public java.util.List<policy.Policy.PolicyRule.Builder> 
            getPolicyRulesBuilderList() {
         return getPolicyRulesFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          policy.Policy.PolicyRuleId, policy.Policy.PolicyRuleId.Builder, policy.Policy.PolicyRuleIdOrBuilder> 
+          policy.Policy.PolicyRule, policy.Policy.PolicyRule.Builder, policy.Policy.PolicyRuleOrBuilder> 
           getPolicyRulesFieldBuilder() {
         if (policyRulesBuilder_ == null) {
           policyRulesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              policy.Policy.PolicyRuleId, policy.Policy.PolicyRuleId.Builder, policy.Policy.PolicyRuleIdOrBuilder>(
+              policy.Policy.PolicyRule, policy.Policy.PolicyRule.Builder, policy.Policy.PolicyRuleOrBuilder>(
                   policyRules_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
@@ -10524,30 +10524,30 @@ public final class Policy {
       "viceList\030\001 \003(\0132\031.policy.PolicyRuleServic" +
       "e\"N\n\024PolicyRuleDeviceList\0226\n\024policyRuleD" +
       "eviceList\030\001 \003(\0132\030.policy.PolicyRuleDevic" +
-      "e\";\n\016PolicyRuleList\022)\n\013policyRules\030\001 \003(\013" +
-      "2\024.policy.PolicyRuleId*\377\001\n\023PolicyRuleSta" +
-      "teEnum\022\024\n\020POLICY_UNDEFINED\020\000\022\021\n\rPOLICY_F" +
-      "AILED\020\001\022\023\n\017POLICY_INSERTED\020\002\022\024\n\020POLICY_V" +
-      "ALIDATED\020\003\022\026\n\022POLICY_PROVISIONED\020\004\022\021\n\rPO" +
-      "LICY_ACTIVE\020\005\022\023\n\017POLICY_ENFORCED\020\006\022\026\n\022PO" +
-      "LICY_INEFFECTIVE\020\007\022\024\n\020POLICY_EFFECTIVE\020\010" +
-      "\022\022\n\016POLICY_UPDATED\020\t\022\022\n\016POLICY_REMOVED\020\n" +
-      "2\323\004\n\rPolicyService\022H\n\020PolicyAddService\022\031" +
-      ".policy.PolicyRuleService\032\027.policy.Polic" +
-      "yRuleState\"\000\022F\n\017PolicyAddDevice\022\030.policy" +
-      ".PolicyRuleDevice\032\027.policy.PolicyRuleSta" +
-      "te\"\000\022K\n\023PolicyUpdateService\022\031.policy.Pol" +
-      "icyRuleService\032\027.policy.PolicyRuleState\"" +
-      "\000\022I\n\022PolicyUpdateDevice\022\030.policy.PolicyR" +
-      "uleDevice\032\027.policy.PolicyRuleState\"\000\022?\n\014" +
-      "PolicyDelete\022\024.policy.PolicyRuleId\032\027.pol" +
-      "icy.PolicyRuleState\"\000\022E\n\020GetPolicyServic" +
-      "e\022\024.policy.PolicyRuleId\032\031.policy.PolicyR" +
-      "uleService\"\000\022C\n\017GetPolicyDevice\022\024.policy" +
-      ".PolicyRuleId\032\030.policy.PolicyRuleDevice\"" +
-      "\000\022K\n\024GetPolicyByServiceId\022\022.context.Serv" +
-      "iceId\032\035.policy.PolicyRuleServiceList\"\000b\006" +
-      "proto3"
+      "e\"9\n\016PolicyRuleList\022\'\n\013policyRules\030\001 \003(\013" +
+      "2\022.policy.PolicyRule*\377\001\n\023PolicyRuleState" +
+      "Enum\022\024\n\020POLICY_UNDEFINED\020\000\022\021\n\rPOLICY_FAI" +
+      "LED\020\001\022\023\n\017POLICY_INSERTED\020\002\022\024\n\020POLICY_VAL" +
+      "IDATED\020\003\022\026\n\022POLICY_PROVISIONED\020\004\022\021\n\rPOLI" +
+      "CY_ACTIVE\020\005\022\023\n\017POLICY_ENFORCED\020\006\022\026\n\022POLI" +
+      "CY_INEFFECTIVE\020\007\022\024\n\020POLICY_EFFECTIVE\020\010\022\022" +
+      "\n\016POLICY_UPDATED\020\t\022\022\n\016POLICY_REMOVED\020\n2\323" +
+      "\004\n\rPolicyService\022H\n\020PolicyAddService\022\031.p" +
+      "olicy.PolicyRuleService\032\027.policy.PolicyR" +
+      "uleState\"\000\022F\n\017PolicyAddDevice\022\030.policy.P" +
+      "olicyRuleDevice\032\027.policy.PolicyRuleState" +
+      "\"\000\022K\n\023PolicyUpdateService\022\031.policy.Polic" +
+      "yRuleService\032\027.policy.PolicyRuleState\"\000\022" +
+      "I\n\022PolicyUpdateDevice\022\030.policy.PolicyRul" +
+      "eDevice\032\027.policy.PolicyRuleState\"\000\022?\n\014Po" +
+      "licyDelete\022\024.policy.PolicyRuleId\032\027.polic" +
+      "y.PolicyRuleState\"\000\022E\n\020GetPolicyService\022" +
+      "\024.policy.PolicyRuleId\032\031.policy.PolicyRul" +
+      "eService\"\000\022C\n\017GetPolicyDevice\022\024.policy.P" +
+      "olicyRuleId\032\030.policy.PolicyRuleDevice\"\000\022" +
+      "K\n\024GetPolicyByServiceId\022\022.context.Servic" +
+      "eId\032\035.policy.PolicyRuleServiceList\"\000b\006pr" +
+      "oto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
diff --git a/src/policy/target/generated-sources/grpc/policy/PolicyAction.java b/src/policy/target/generated-sources/grpc/policy/PolicyAction.java
index f7d7c71cd5e51a0685e0503c51ce7003aced8f05..c79a3487bb3a6d9c9cffab185da605a15366f0d4 100644
--- a/src/policy/target/generated-sources/grpc/policy/PolicyAction.java
+++ b/src/policy/target/generated-sources/grpc/policy/PolicyAction.java
@@ -35,6 +35,14 @@ public final class PolicyAction {
      * <code>POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT = 3;</code>
      */
     POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT(3),
+    /**
+     * <code>POLICY_RULE_ACTION_CALL_SERVICE_RPC = 4;</code>
+     */
+    POLICY_RULE_ACTION_CALL_SERVICE_RPC(4),
+    /**
+     * <code>POLICY_RULE_ACTION_RECALCULATE_PATH = 5;</code>
+     */
+    POLICY_RULE_ACTION_RECALCULATE_PATH(5),
     UNRECOGNIZED(-1),
     ;
 
@@ -54,6 +62,14 @@ public final class PolicyAction {
      * <code>POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT = 3;</code>
      */
     public static final int POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT_VALUE = 3;
+    /**
+     * <code>POLICY_RULE_ACTION_CALL_SERVICE_RPC = 4;</code>
+     */
+    public static final int POLICY_RULE_ACTION_CALL_SERVICE_RPC_VALUE = 4;
+    /**
+     * <code>POLICY_RULE_ACTION_RECALCULATE_PATH = 5;</code>
+     */
+    public static final int POLICY_RULE_ACTION_RECALCULATE_PATH_VALUE = 5;
 
 
     public final int getNumber() {
@@ -84,6 +100,8 @@ public final class PolicyAction {
         case 1: return POLICYRULE_ACTION_SET_DEVICE_STATUS;
         case 2: return POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE;
         case 3: return POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT;
+        case 4: return POLICY_RULE_ACTION_CALL_SERVICE_RPC;
+        case 5: return POLICY_RULE_ACTION_RECALCULATE_PATH;
         default: return null;
       }
     }
@@ -1798,12 +1816,14 @@ public final class PolicyAction {
       "yRuleActionEnum\0225\n\raction_config\030\002 \003(\0132\036" +
       ".policy.PolicyRuleActionConfig\"B\n\026Policy" +
       "RuleActionConfig\022\022\n\naction_key\030\001 \001(\t\022\024\n\014" +
-      "action_value\030\002 \001(\t*\274\001\n\024PolicyRuleActionE" +
+      "action_value\030\002 \001(\t*\216\002\n\024PolicyRuleActionE" +
       "num\022\037\n\033POLICYRULE_ACTION_NO_ACTION\020\000\022\'\n#" +
       "POLICYRULE_ACTION_SET_DEVICE_STATUS\020\001\022,\n" +
       "(POLICYRULE_ACTION_ADD_SERVICE_CONFIGRUL" +
       "E\020\002\022,\n(POLICYRULE_ACTION_ADD_SERVICE_CON" +
-      "STRAINT\020\003b\006proto3"
+      "STRAINT\020\003\022\'\n#POLICY_RULE_ACTION_CALL_SER" +
+      "VICE_RPC\020\004\022\'\n#POLICY_RULE_ACTION_RECALCU" +
+      "LATE_PATH\020\005b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
diff --git a/src/policy/target/generated-sources/grpc/service/MutinyServiceServiceGrpc.java b/src/policy/target/generated-sources/grpc/service/MutinyServiceServiceGrpc.java
index 8caa9641d654e5b0f3e07635b366684d8ab5f980..cc94512929b34d0f3ddf427be5cb5655d774479b 100644
--- a/src/policy/target/generated-sources/grpc/service/MutinyServiceServiceGrpc.java
+++ b/src/policy/target/generated-sources/grpc/service/MutinyServiceServiceGrpc.java
@@ -50,6 +50,11 @@ public final class MutinyServiceServiceGrpc implements io.quarkus.grpc.runtime.M
             return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::deleteService);
         }
 
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> recomputeConnections(context.ContextOuterClass.Service request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::recomputeConnections);
+        }
+
     }
 
     
@@ -82,6 +87,11 @@ public final class MutinyServiceServiceGrpc implements io.quarkus.grpc.runtime.M
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> recomputeConnections(context.ContextOuterClass.Service request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
         @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
             return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
                     .addMethod(
@@ -105,6 +115,13 @@ public final class MutinyServiceServiceGrpc implements io.quarkus.grpc.runtime.M
                                             context.ContextOuterClass.ServiceId,
                                             context.ContextOuterClass.Empty>(
                                             this, METHODID_DELETE_SERVICE, compression)))
+                    .addMethod(
+                            service.ServiceServiceGrpc.getRecomputeConnectionsMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Service,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_RECOMPUTE_CONNECTIONS, compression)))
                     .build();
         }
     }
@@ -112,6 +129,7 @@ public final class MutinyServiceServiceGrpc implements io.quarkus.grpc.runtime.M
     private static final int METHODID_CREATE_SERVICE = 0;
     private static final int METHODID_UPDATE_SERVICE = 1;
     private static final int METHODID_DELETE_SERVICE = 2;
+    private static final int METHODID_RECOMPUTE_CONNECTIONS = 3;
 
     private static final class MethodHandlers<Req, Resp> implements
             io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
@@ -150,6 +168,12 @@ public final class MutinyServiceServiceGrpc implements io.quarkus.grpc.runtime.M
                             compression,
                             serviceImpl::deleteService);
                     break;
+                case METHODID_RECOMPUTE_CONNECTIONS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Service) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            compression,
+                            serviceImpl::recomputeConnections);
+                    break;
                 default:
                     throw new java.lang.AssertionError();
             }
diff --git a/src/policy/target/generated-sources/grpc/service/Service.java b/src/policy/target/generated-sources/grpc/service/Service.java
index 32393a23714ffd1c1aa69d0909a3ffe7bc876146..aa9280357d820220c97d0baa18e1fb4f74a00804 100644
--- a/src/policy/target/generated-sources/grpc/service/Service.java
+++ b/src/policy/target/generated-sources/grpc/service/Service.java
@@ -24,11 +24,13 @@ public final class Service {
   static {
     java.lang.String[] descriptorData = {
       "\n\rservice.proto\022\007service\032\rcontext.proto2" +
-      "\271\001\n\016ServiceService\0227\n\rCreateService\022\020.co" +
+      "\365\001\n\016ServiceService\0227\n\rCreateService\022\020.co" +
       "ntext.Service\032\022.context.ServiceId\"\000\0227\n\rU" +
       "pdateService\022\020.context.Service\032\022.context" +
       ".ServiceId\"\000\0225\n\rDeleteService\022\022.context." +
-      "ServiceId\032\016.context.Empty\"\000b\006proto3"
+      "ServiceId\032\016.context.Empty\"\000\022:\n\024Recompute" +
+      "Connections\022\020.context.Service\032\016.context." +
+      "Empty\"\000b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
diff --git a/src/policy/target/generated-sources/grpc/service/ServiceService.java b/src/policy/target/generated-sources/grpc/service/ServiceService.java
index b51f2353623b201978b84ff8587553a8ef606b51..531c92ce66bd4084e9db441bef0660acb0461d98 100644
--- a/src/policy/target/generated-sources/grpc/service/ServiceService.java
+++ b/src/policy/target/generated-sources/grpc/service/ServiceService.java
@@ -14,6 +14,8 @@ public interface ServiceService extends MutinyService {
     
     io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteService(context.ContextOuterClass.ServiceId request);
     
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> recomputeConnections(context.ContextOuterClass.Service request);
+    
     
     
 
diff --git a/src/policy/target/generated-sources/grpc/service/ServiceServiceBean.java b/src/policy/target/generated-sources/grpc/service/ServiceServiceBean.java
index a4c34aaa82129ae725d7b2ff7abeff7dc6c159cc..433a8149b102dd72c1cbf61e2fe6dca9fb3bc838 100644
--- a/src/policy/target/generated-sources/grpc/service/ServiceServiceBean.java
+++ b/src/policy/target/generated-sources/grpc/service/ServiceServiceBean.java
@@ -39,5 +39,13 @@ public class ServiceServiceBean extends MutinyServiceServiceGrpc.ServiceServiceI
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> recomputeConnections(context.ContextOuterClass.Service request) {
+       try {
+         return delegate.recomputeConnections(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
 
 }
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/service/ServiceServiceClient.java b/src/policy/target/generated-sources/grpc/service/ServiceServiceClient.java
index 91522d4779a6ee7c85c9589588ea7cc0cba39efc..50063b344e4f87a0dd3966af60a5c945639c57d3 100644
--- a/src/policy/target/generated-sources/grpc/service/ServiceServiceClient.java
+++ b/src/policy/target/generated-sources/grpc/service/ServiceServiceClient.java
@@ -32,5 +32,9 @@ public class ServiceServiceClient implements ServiceService, MutinyClient<Mutiny
     public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteService(context.ContextOuterClass.ServiceId request) {
        return stub.deleteService(request);
     }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> recomputeConnections(context.ContextOuterClass.Service request) {
+       return stub.recomputeConnections(request);
+    }
 
 }
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/service/ServiceServiceGrpc.java b/src/policy/target/generated-sources/grpc/service/ServiceServiceGrpc.java
index 66419a93bacee7dad02d302044b8024e8ed12154..5b926a2af71c4d2e7e83d4ef3c2723b8ca7e3a8f 100644
--- a/src/policy/target/generated-sources/grpc/service/ServiceServiceGrpc.java
+++ b/src/policy/target/generated-sources/grpc/service/ServiceServiceGrpc.java
@@ -107,6 +107,37 @@ public final class ServiceServiceGrpc {
     return getDeleteServiceMethod;
   }
 
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Service,
+      context.ContextOuterClass.Empty> getRecomputeConnectionsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "RecomputeConnections",
+      requestType = context.ContextOuterClass.Service.class,
+      responseType = context.ContextOuterClass.Empty.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Service,
+      context.ContextOuterClass.Empty> getRecomputeConnectionsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Service, context.ContextOuterClass.Empty> getRecomputeConnectionsMethod;
+    if ((getRecomputeConnectionsMethod = ServiceServiceGrpc.getRecomputeConnectionsMethod) == null) {
+      synchronized (ServiceServiceGrpc.class) {
+        if ((getRecomputeConnectionsMethod = ServiceServiceGrpc.getRecomputeConnectionsMethod) == null) {
+          ServiceServiceGrpc.getRecomputeConnectionsMethod = getRecomputeConnectionsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Service, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "RecomputeConnections"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Service.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new ServiceServiceMethodDescriptorSupplier("RecomputeConnections"))
+              .build();
+        }
+      }
+    }
+    return getRecomputeConnectionsMethod;
+  }
+
   /**
    * Creates a new async stub that supports all call types for the service
    */
@@ -176,6 +207,13 @@ public final class ServiceServiceGrpc {
       io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteServiceMethod(), responseObserver);
     }
 
+    /**
+     */
+    public void recomputeConnections(context.ContextOuterClass.Service request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getRecomputeConnectionsMethod(), responseObserver);
+    }
+
     @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
       return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
           .addMethod(
@@ -199,6 +237,13 @@ public final class ServiceServiceGrpc {
                 context.ContextOuterClass.ServiceId,
                 context.ContextOuterClass.Empty>(
                   this, METHODID_DELETE_SERVICE)))
+          .addMethod(
+            getRecomputeConnectionsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Service,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_RECOMPUTE_CONNECTIONS)))
           .build();
     }
   }
@@ -240,6 +285,14 @@ public final class ServiceServiceGrpc {
       io.grpc.stub.ClientCalls.asyncUnaryCall(
           getChannel().newCall(getDeleteServiceMethod(), getCallOptions()), request, responseObserver);
     }
+
+    /**
+     */
+    public void recomputeConnections(context.ContextOuterClass.Service request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getRecomputeConnectionsMethod(), getCallOptions()), request, responseObserver);
+    }
   }
 
   /**
@@ -276,6 +329,13 @@ public final class ServiceServiceGrpc {
       return io.grpc.stub.ClientCalls.blockingUnaryCall(
           getChannel(), getDeleteServiceMethod(), getCallOptions(), request);
     }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty recomputeConnections(context.ContextOuterClass.Service request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getRecomputeConnectionsMethod(), getCallOptions(), request);
+    }
   }
 
   /**
@@ -315,11 +375,20 @@ public final class ServiceServiceGrpc {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
           getChannel().newCall(getDeleteServiceMethod(), getCallOptions()), request);
     }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> recomputeConnections(
+        context.ContextOuterClass.Service request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getRecomputeConnectionsMethod(), getCallOptions()), request);
+    }
   }
 
   private static final int METHODID_CREATE_SERVICE = 0;
   private static final int METHODID_UPDATE_SERVICE = 1;
   private static final int METHODID_DELETE_SERVICE = 2;
+  private static final int METHODID_RECOMPUTE_CONNECTIONS = 3;
 
   private static final class MethodHandlers<Req, Resp> implements
       io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
@@ -350,6 +419,10 @@ public final class ServiceServiceGrpc {
           serviceImpl.deleteService((context.ContextOuterClass.ServiceId) request,
               (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
           break;
+        case METHODID_RECOMPUTE_CONNECTIONS:
+          serviceImpl.recomputeConnections((context.ContextOuterClass.Service) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
         default:
           throw new AssertionError();
       }
@@ -414,6 +487,7 @@ public final class ServiceServiceGrpc {
               .addMethod(getCreateServiceMethod())
               .addMethod(getUpdateServiceMethod())
               .addMethod(getDeleteServiceMethod())
+              .addMethod(getRecomputeConnectionsMethod())
               .build();
         }
       }
diff --git a/src/tests/benchmark/policy/deploy_specs.sh b/src/tests/benchmark/policy/deploy_specs.sh
old mode 100755
new mode 100644
diff --git a/src/tests/ecoc22/descriptors_emulated.json b/src/tests/ecoc22/descriptors_emulated.json
index f55954d92fbe3cf75b3464286f897c3f931c0c39..da36a6ae995941f8dbbf998df31f8d7258decbaf 100644
--- a/src/tests/ecoc22/descriptors_emulated.json
+++ b/src/tests/ecoc22/descriptors_emulated.json
@@ -136,6 +136,55 @@
                 {"device_id": {"device_uuid": {"uuid": "CS2-GW2"}}, "endpoint_uuid": {"uuid": "1/1"}},
                 {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "50296d99-58cc-5ce7-82f5-fc8ee4eec2ec"}}
             ]
+        },
+
+        {
+            "link_id": {"link_uuid": {"uuid": "CS1-GW1/10/1==DC1-GW/eth1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "CS1-GW1"}}, "endpoint_uuid": {"uuid": "10/1"}},
+                {"device_id": {"device_uuid": {"uuid": "DC1-GW"}}, "endpoint_uuid": {"uuid": "eth1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "CS1-GW2/10/1==DC1-GW/eth2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "CS1-GW2"}}, "endpoint_uuid": {"uuid": "10/1"}},
+                {"device_id": {"device_uuid": {"uuid": "DC1-GW"}}, "endpoint_uuid": {"uuid": "eth2"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "CS2-GW1/10/1==DC2-GW/eth1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "CS2-GW1"}}, "endpoint_uuid": {"uuid": "10/1"}},
+                {"device_id": {"device_uuid": {"uuid": "DC2-GW"}}, "endpoint_uuid": {"uuid": "eth1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "CS2-GW2/10/1==DC2-GW/eth2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "CS2-GW2"}}, "endpoint_uuid": {"uuid": "10/1"}},
+                {"device_id": {"device_uuid": {"uuid": "DC2-GW"}}, "endpoint_uuid": {"uuid": "eth2"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870==CS1-GW1/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "aade6001-f00b-5e2f-a357-6a0a9d3de870"}},
+                {"device_id": {"device_uuid": {"uuid": "CS1-GW1"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418==CS1-GW2/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "eb287d83-f05e-53ec-ab5a-adf6bd2b5418"}},
+                {"device_id": {"device_uuid": {"uuid": "CS1-GW2"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513==CS2-GW1/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "0ef74f99-1acc-57bd-ab9d-4b958b06c513"}},
+                {"device_id": {"device_uuid": {"uuid": "CS2-GW1"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec==CS2-GW2/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "50296d99-58cc-5ce7-82f5-fc8ee4eec2ec"}},
+                {"device_id": {"device_uuid": {"uuid": "CS2-GW2"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
         }
     ]
 }
diff --git a/src/tests/ofc22/deploy_specs.sh b/src/tests/ofc22/deploy_specs.sh
index 6c3d9db662a8232f1fcccf3835b98d69571b6337..08a8dfaad5cdb0cb28fafb618f9b932e630bd114 100755
--- a/src/tests/ofc22/deploy_specs.sh
+++ b/src/tests/ofc22/deploy_specs.sh
@@ -57,7 +57,7 @@ export CRDB_DATABASE="tfs"
 export CRDB_DEPLOY_MODE="single"
 
 # Disable flag for dropping database, if it exists.
-export CRDB_DROP_DATABASE_IF_EXISTS=""
+export CRDB_DROP_DATABASE_IF_EXISTS="YES"
 
 # Disable flag for re-deploying CockroachDB from scratch.
 export CRDB_REDEPLOY=""
@@ -87,7 +87,7 @@ export QDB_PASSWORD="quest"
 export QDB_TABLE_MONITORING_KPIS="tfs_monitoring_kpis"
 
 # Disable flag for dropping tables if they exist.
-export QDB_DROP_TABLES_IF_EXIST=""
+export QDB_DROP_TABLES_IF_EXIST="YES"
 
 # Disable flag for re-deploying QuestDB from scratch.
 export QDB_REDEPLOY=""
diff --git a/src/tests/p4/README.md b/src/tests/p4/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..43920d14d5e99214bb2ad8418cc4babcae5be91c
--- /dev/null
+++ b/src/tests/p4/README.md
@@ -0,0 +1,41 @@
+# Tests for P4 functionality of TeraFlowSDN
+
+This directory contains the necessary scripts and configurations to run tests for the P4 functionality of TFS.
+
+## Basic scripts
+
+To run the experiments you should use the five scripts in the following order:
+```
+setup.sh
+run_test_01_bootstrap.sh
+run_test_02_create_service.sh
+run_test_03_delete_service.sh
+run_test_04_cleanup.sh
+```
+
+The setup script copies the necessary artifacts to the SBI service pod. It should be run just once, after a fresh install of TFS.
+The bootstrap script registers the context, topology, links and, devices to TFS.
+The create service scripts establishes a service between two endpoints.
+The delete service script delete the aforementioned service.
+Cleanup script deletes all the objects (context, topology, links, devices) from TFS.
+
+## Objects file
+
+The above bash scripts make use of the corresponding python scripts found under `./tests/` directory.
+More important is the `./tests/Objects.py` file, which contains the definition of the Context, Topology, Devices, Links, Services. **This is the file that need changes in case of a new topology.**
+
+Check the `./tests/Objects.py` file before running the experiment to make sure that the switches details are correct (ip address, port, etc.)
+
+## Mininet topologies
+
+In the `./mininet/` directory there are different mininet topology examples. The current `./tests/Objects.py` file corresponds to the `./mininet/8switch3path.py` topology. Additionally there is a backup file `./tests/topologies/6switchObjects.py` which corresponds to the `./mininet/6switch2path.py`.
+
+## P4 artifacts
+
+In the `./p4/` directory there are the compiled p4 artifacts that contain the pipeline that will be pushed to the p4 switch, along with the p4-runtime definitions. 
+The `./setup.sh` script copies from this directory. So if you need to change p4 program, make sure to put the compiled artifacts here.
+
+## Latency probe
+
+In the `./probe/` directory there is a little program which calculates latency between two hosts in mininet and sends them to the Monitoring component. For specific instructions, refer to the corresponding `./probe/README.md` file.
+
diff --git a/src/tests/p4/mininet/8switch3path.py b/src/tests/p4/mininet/8switch3path.py
new file mode 100755
index 0000000000000000000000000000000000000000..9a41e53fb60514412d8cd1cecf451b132663d8f3
--- /dev/null
+++ b/src/tests/p4/mininet/8switch3path.py
@@ -0,0 +1,127 @@
+#!/usr/bin/python
+
+#  Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#  Copyright 2019-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.
+
+import argparse
+
+from mininet.cli import CLI
+from mininet.log import setLogLevel
+from mininet.net import Mininet
+from mininet.node import Host
+from mininet.topo import Topo
+from stratum import StratumBmv2Switch
+
+CPU_PORT = 255
+
+class IPv4Host(Host):
+    """Host that can be configured with an IPv4 gateway (default route).
+    """
+
+    def config(self, mac=None, ip=None, defaultRoute=None, lo='up', gw=None,
+               **_params):
+        super(IPv4Host, self).config(mac, ip, defaultRoute, lo, **_params)
+        self.cmd('ip -4 addr flush dev %s' % self.defaultIntf())
+        self.cmd('ip -6 addr flush dev %s' % self.defaultIntf())
+        self.cmd('ip -4 link set up %s' % self.defaultIntf())
+        self.cmd('ip -4 addr add %s dev %s' % (ip, self.defaultIntf()))
+        if gw:
+            self.cmd('ip -4 route add default via %s' % gw)
+        # Disable offload
+        for attr in ["rx", "tx", "sg"]:
+            cmd = "/sbin/ethtool --offload %s %s off" % (
+                self.defaultIntf(), attr)
+            self.cmd(cmd)
+
+        def updateIP():
+            return ip.split('/')[0]
+
+        self.defaultIntf().updateIP = updateIP
+
+class TutorialTopo(Topo):
+    """Basic Server-Client topology with IPv4 hosts"""
+
+    def __init__(self, *args, **kwargs):
+        Topo.__init__(self, *args, **kwargs)
+
+        # Switches
+        # gRPC port 50001
+        switch1 = self.addSwitch('switch1', cls=StratumBmv2Switch, cpuport=CPU_PORT)
+        # gRPC port 50002
+        switch2 = self.addSwitch('switch2', cls=StratumBmv2Switch, cpuport=CPU_PORT)
+        # gRPC port 50003
+        switch3 = self.addSwitch('switch3', cls=StratumBmv2Switch, cpuport=CPU_PORT)
+        # gRPC port 50004
+        switch4 = self.addSwitch('switch4', cls=StratumBmv2Switch, cpuport=CPU_PORT)
+        # gRPC port 50005
+        switch5 = self.addSwitch('switch5', cls=StratumBmv2Switch, cpuport=CPU_PORT)
+        # gRPC port 50006
+        switch6 = self.addSwitch('switch6', cls=StratumBmv2Switch, cpuport=CPU_PORT)
+        # gRPC port 50007
+        switch7 = self.addSwitch('switch7', cls=StratumBmv2Switch, cpuport=CPU_PORT)
+        # gRPC port 50008
+        switch8 = self.addSwitch('switch8', cls=StratumBmv2Switch, cpuport=CPU_PORT)
+
+        # Hosts
+        client = self.addHost('client', cls=IPv4Host, mac="aa:bb:cc:dd:ee:11",
+                            ip='10.0.0.1/24', gw='10.0.0.100')
+        server = self.addHost('server', cls=IPv4Host, mac="aa:bb:cc:dd:ee:22",
+                            ip='10.0.0.2/24', gw='10.0.0.100')
+        
+        # Switch links
+        self.addLink(switch1, switch2)  # Switch1:port 1, Switch2:port 1
+        self.addLink(switch1, switch4)  # Switch1:port 2, Switch4:port 1
+        self.addLink(switch1, switch6)  # Switch1:port 3, Switch6:port 1
+
+        self.addLink(switch2, switch3)  # Switch2:port 2, Switch3:port 1
+        self.addLink(switch4, switch5)  # Switch4:port 2, Switch5:port 1
+        self.addLink(switch6, switch7)  # Switch6:port 2, Switch7:port 1
+
+        self.addLink(switch3, switch8)  # Switch3:port 2, Switch8:port 1
+        self.addLink(switch5, switch8)  # Switch5:port 2, Switch8:port 2
+        self.addLink(switch7, switch8)  # Switch7:port 2, Switch8:port 3
+        
+        # Host links
+        self.addLink(client, switch1)   # Switch1: port 4
+        self.addLink(server, switch8)   # Switch8: port 4
+
+def main():
+    net = Mininet(topo=TutorialTopo(), controller=None)
+    net.start()
+    
+    #get hosts
+    client = net.hosts[0]
+    client.setARP('10.0.0.2', 'aa:bb:cc:dd:ee:22')
+    server = net.hosts[1]
+    server.setARP('10.0.0.1', 'aa:bb:cc:dd:ee:11')
+    
+    CLI(net)
+    net.stop()
+    print '#' * 80
+    print 'ATTENTION: Mininet was stopped! Perhaps accidentally?'
+    print 'No worries, it will restart automatically in a few seconds...'
+    print 'To access again the Mininet CLI, use `make mn-cli`'
+    print 'To detach from the CLI (without stopping), press Ctrl-D'
+    print 'To permanently quit Mininet, use `make stop`'
+    print '#' * 80
+
+
+if __name__ == "__main__":
+    parser = argparse.ArgumentParser(
+        description='Mininet topology script for 2x2 fabric with stratum_bmv2 and IPv4 hosts')
+    args = parser.parse_args()
+    setLogLevel('info')
+
+    main()
diff --git a/src/tests/p4/probe/README.md b/src/tests/p4/probe/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..bfc1e4731dc44a61b32ad5d75093f4aca1f57dbf
--- /dev/null
+++ b/src/tests/p4/probe/README.md
@@ -0,0 +1,40 @@
+# Probe for P4 mininet devices
+
+Step 1:
+To copy the necessary files, run:
+
+```
+probe-tfs/deploy.sh
+```
+
+Step 2:
+To connect to the mininet docker, run:
+
+```
+probe-tfs/connect-to-mininet.sh
+```
+
+Step 3:
+From inside the mininet docker, run:
+
+```
+./tfsagent
+```
+
+Step 4 (on another terminal):
+Establish the service:
+```
+src/tests/p4/run_test_02_create_service.sh
+```
+
+Step 5:
+From inside mininet (make mn-cli):
+```
+client ./tfsping
+```
+
+Step 6 (on another terminal):
+To check the latest monitoring samples, run
+```
+python src/tests/p4/probe/monitoring_kpis.py
+```
diff --git a/src/tests/p4/probe/monitoring_kpis.ipynb b/src/tests/p4/probe/monitoring_kpis.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..728b7394eb9cbbf50fd5b4fcad568c0968abc608
--- /dev/null
+++ b/src/tests/p4/probe/monitoring_kpis.ipynb
@@ -0,0 +1,184 @@
+{
+ "cells": [
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Checking the monitoring component"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import time\n",
+    "import datetime\n",
+    "import uuid\n",
+    "import random\n",
+    "\n",
+    "from dotenv import load_dotenv\n",
+    "from IPython.display import clear_output, display, HTML\n",
+    "\n",
+    "from common.tools.timestamp.Converters import timestamp_utcnow_to_float, timestamp_float_to_string\n",
+    "from common.tools.grpc.Tools import grpc_message_to_json_string\n",
+    "from common.proto.kpi_sample_types_pb2 import KpiSampleType\n",
+    "from common.proto.monitoring_pb2 import KpiDescriptor, KpiId, KpiQuery, Kpi\n",
+    "from monitoring.client.MonitoringClient import MonitoringClient"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'0abfb00117d4461b9fa5085bee4be58f'"
+      ]
+     },
+     "execution_count": 2,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "load_dotenv()\n",
+    "\n",
+    "monitoring_client = MonitoringClient()\n",
+    "uuid.uuid4().hex"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Created KPI {\"kpi_id\": {\"uuid\": \"1\"}}: \n"
+     ]
+    }
+   ],
+   "source": [
+    "kpi_description: KpiDescriptor = KpiDescriptor()\n",
+    "kpi_description.kpi_description = \"Security status of service {}\".format(uuid.uuid4().hex)\n",
+    "kpi_description.service_id.service_uuid.uuid = \"608df176-90b8-5950-b50d-1810c6eaaa5d\"\n",
+    "kpi_description.kpi_sample_type = KpiSampleType.KPISAMPLETYPE_UNKNOWN\n",
+    "new_kpi = monitoring_client.SetKpi(kpi_description)\n",
+    "print(\"Created KPI {}: \".format(grpc_message_to_json_string(new_kpi)))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<table>\n",
+       "    <thead>\n",
+       "        <tr><th colspan=3>2023-02-24 16:23:34.373384</th></tr>\n",
+       "        <tr><th>KPI ID</th><th>Timestamp</th><th>Value</th></tr>\n",
+       "    <thead>\n",
+       "    <tbody><tr><td>0 - 1</td><td>2023-02-23T13:55:09Z</td><td>floatVal: 1868.0\n",
+       "</td></tr><tr><td>1 - 1</td><td>2023-02-23T13:55:07Z</td><td>floatVal: 1878.0\n",
+       "</td></tr><tr><td>2 - 1</td><td>2023-02-23T13:55:05Z</td><td>floatVal: 2065.0\n",
+       "</td></tr><tr><td>3 - 1</td><td>2023-02-23T13:55:03Z</td><td>floatVal: 1993.0\n",
+       "</td></tr><tr><td>4 - 1</td><td>2023-02-23T13:55:01Z</td><td>floatVal: 2006.0\n",
+       "</td></tr><tr><td>5 - 1</td><td>2023-02-23T13:54:59Z</td><td>floatVal: 1938.0\n",
+       "</td></tr><tr><td>6 - 1</td><td>2023-02-23T13:54:57Z</td><td>floatVal: 1920.0\n",
+       "</td></tr><tr><td>7 - 1</td><td>2023-02-23T13:54:55Z</td><td>floatVal: 1984.0\n",
+       "</td></tr><tr><td>8 - 1</td><td>2023-02-23T13:54:53Z</td><td>floatVal: 1883.0\n",
+       "</td></tr><tr><td>9 - 1</td><td>2023-02-23T13:54:51Z</td><td>floatVal: 1948.0\n",
+       "</td></tr></tbody></table>"
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "ename": "KeyboardInterrupt",
+     "evalue": "",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
+      "Cell \u001b[0;32mIn [4], line 31\u001b[0m\n\u001b[1;32m     29\u001b[0m table \u001b[39m+\u001b[39m\u001b[39m=\u001b[39m \u001b[39m\"\u001b[39m\u001b[39m</tbody></table>\u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m     30\u001b[0m display(HTML(table))\n\u001b[0;32m---> 31\u001b[0m time\u001b[39m.\u001b[39;49msleep(\u001b[39m5\u001b[39;49m)\n\u001b[1;32m     32\u001b[0m clear_output(wait\u001b[39m=\u001b[39m\u001b[39mTrue\u001b[39;00m)\n",
+      "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
+     ]
+    }
+   ],
+   "source": [
+    "kpi_id = input(\"What is the KPI ID?\")\n",
+    "query = KpiQuery()\n",
+    "query.kpi_ids.append(KpiId(**{\"kpi_id\": {\"uuid\": kpi_id}}))\n",
+    "query.last_n_samples = 10\n",
+    "\n",
+    "while True:\n",
+    "\n",
+    "    kpi = Kpi()\n",
+    "    kpi.kpi_id.kpi_id.uuid = new_kpi.kpi_id.uuid\n",
+    "    kpi.timestamp.timestamp = timestamp_utcnow_to_float()\n",
+    "    kpi.kpi_value.int32Val = random.randint(10, 4000)\n",
+    "    # monitoring_client.IncludeKpi(kpi)\n",
+    "\n",
+    "    response = monitoring_client.QueryKpiData(query)\n",
+    "    # print(response)\n",
+    "    table = f\"\"\"<table>\n",
+    "    <thead>\n",
+    "        <tr><th colspan=3>{datetime.datetime.now()}</th></tr>\n",
+    "        <tr><th>KPI ID</th><th>Timestamp</th><th>Value</th></tr>\n",
+    "    <thead>\n",
+    "    <tbody>\"\"\"\n",
+    "    for kpi in response.raw_kpi_lists:\n",
+    "        cur_kpi_id = kpi.kpi_id.kpi_id.uuid\n",
+    "        for i, raw_kpi in enumerate(kpi.raw_kpis):\n",
+    "            # print(cur_kpi_id, raw_kpi.timestamp.timestamp, raw_kpi.kpi_value)\n",
+    "            table += \"<tr><td>{} - {}</td><td>{}</td><td>{}</td></tr>\".format(\n",
+    "                i, cur_kpi_id, timestamp_float_to_string(raw_kpi.timestamp.timestamp), raw_kpi.kpi_value\n",
+    "            )\n",
+    "    table += \"</tbody></table>\"\n",
+    "    display(HTML(table))\n",
+    "    time.sleep(5)\n",
+    "    clear_output(wait=True)"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "tfs",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.9.14"
+  },
+  "orig_nbformat": 4,
+  "vscode": {
+   "interpreter": {
+    "hash": "7ea5723b29014fc8d8bf1a065f5287f0787f54201758f2b5d4b4b0b2ddc48863"
+   }
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/src/tests/p4/probe/monitoring_kpis.py b/src/tests/p4/probe/monitoring_kpis.py
new file mode 100644
index 0000000000000000000000000000000000000000..880977a2f62069586efdb398b8b3b5d3ac20dac0
--- /dev/null
+++ b/src/tests/p4/probe/monitoring_kpis.py
@@ -0,0 +1,85 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+# File to monitor the latest *n* samples from the KPI ID *id*
+# and updates it every *i* seconds
+#
+# Author: Carlos Natalino <carlos.natalino@chalmers.se>
+
+import argparse
+import datetime
+import time
+
+from common.proto.kpi_sample_types_pb2 import KpiSampleType
+from common.proto.monitoring_pb2 import KpiDescriptor, KpiId, KpiQuery
+from common.tools.grpc.Tools import grpc_message_to_json_string
+from common.tools.timestamp.Converters import timestamp_float_to_string
+from monitoring.client.MonitoringClient import MonitoringClient
+
+if __name__ == "__main__":
+    parser = argparse.ArgumentParser()
+    parser.add_argument(
+        "-n",
+        "--last-n-samples",
+        default=10,
+        type=int,
+        help="Number of latest samples of the KPI to show.",
+    )
+    parser.add_argument(
+        "-s",
+        "--sleep",
+        default=5,
+        type=int,
+        help="Seconds between consecutive refreshes.",
+    )
+    parser.add_argument("-id", "--kpi-id", help="KPI ID, if known.")
+    args = parser.parse_args()
+
+    monitoring_client = MonitoringClient()
+
+    if args.kpi_id is None:
+        service_uuid = "608df176-90b8-5950-b50d-1810c6eaaa5d"
+        kpi_description: KpiDescriptor = KpiDescriptor()
+        kpi_description.kpi_description = "Security status of service {}".format(
+            service_uuid
+        )
+        kpi_description.service_id.service_uuid.uuid = service_uuid
+        kpi_description.kpi_sample_type = KpiSampleType.KPISAMPLETYPE_UNKNOWN
+        new_kpi = monitoring_client.SetKpi(kpi_description)
+        print("Created KPI {}: ".format(grpc_message_to_json_string(new_kpi)))
+        kpi_id = new_kpi.kpi_id.uuid
+    else:
+        kpi_id = args.kpi_id
+
+    query = KpiQuery()
+    query.kpi_ids.append(KpiId(**{"kpi_id": {"uuid": kpi_id}}))
+    query.last_n_samples = args.last_n_samples
+
+    while True:
+        print(chr(27) + "[2J")
+        response = monitoring_client.QueryKpiData(query)
+        print("{}\t{}\t{:<20}\t{}".format("Index", "KPI ID", "Timestamp", "Value"))
+        for kpi in response.raw_kpi_lists:
+            cur_kpi_id = kpi.kpi_id.kpi_id.uuid
+            for i, raw_kpi in enumerate(kpi.raw_kpis):
+                print(
+                    "{}\t{}\t{}\t{}".format(
+                        i,
+                        cur_kpi_id,
+                        timestamp_float_to_string(raw_kpi.timestamp.timestamp),
+                        raw_kpi.kpi_value.floatVal,
+                    )
+                )
+        print("Last update:", datetime.datetime.now().strftime("%H:%M:%S"))
+        time.sleep(args.sleep)
diff --git a/src/tests/p4/probe/probe-tfs/.gitignore b/src/tests/p4/probe/probe-tfs/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..dc8d7ee54c37fd887f19206592ed03a33118a59a
--- /dev/null
+++ b/src/tests/p4/probe/probe-tfs/.gitignore
@@ -0,0 +1,18 @@
+# Generated by Cargo
+# will have compiled files and executables
+/target/
+
+# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
+# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
+Cargo.lock
+
+# These are backup files generated by rustfmt
+**/*.rs.bk
+
+
+# Added by cargo
+
+/target
+
+.env_bkp
+.env
diff --git a/src/tests/p4/probe/probe-tfs/Cargo.toml b/src/tests/p4/probe/probe-tfs/Cargo.toml
new file mode 100644
index 0000000000000000000000000000000000000000..fb5db98bf5233e905d83b7f9fe06d44a71c3a0fd
--- /dev/null
+++ b/src/tests/p4/probe/probe-tfs/Cargo.toml
@@ -0,0 +1,39 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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]
+name = "rust-tfs"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+dotenv = "0.15.0"
+futures = "0.3.26"
+prost = "0.11.6"
+surge-ping = "0.7.3"
+tokio = { version = "1.25", features = ["macros", "rt-multi-thread"] }
+tonic = "0.8.3"
+
+[[bin]]
+name = "tfsping"
+path = "src/ping.rs"
+
+[[bin]]
+name = "tfsagent"
+path = "src/agent.rs"
+
+[build-dependencies]
+tonic-build = "0.8.3"
diff --git a/src/tests/p4/probe/probe-tfs/LICENSE b/src/tests/p4/probe/probe-tfs/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64
--- /dev/null
+++ b/src/tests/p4/probe/probe-tfs/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/src/tests/p4/probe/probe-tfs/README.md b/src/tests/p4/probe/probe-tfs/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..f88d7c542dae22ad623797f43750e0589d2473cf
--- /dev/null
+++ b/src/tests/p4/probe/probe-tfs/README.md
@@ -0,0 +1,2 @@
+# rust-tfs
+Client for TFS functionalities written in Rust.
diff --git a/src/tests/p4/probe/probe-tfs/build.rs b/src/tests/p4/probe/probe-tfs/build.rs
new file mode 100644
index 0000000000000000000000000000000000000000..1dda249d16b3c571676a254f2178f772fb765c81
--- /dev/null
+++ b/src/tests/p4/probe/probe-tfs/build.rs
@@ -0,0 +1,34 @@
+/**
+ * Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+ *
+ * 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.
+ *
+ * Build script that generates Rust code for the protobuffers.
+ *
+ * Author: Carlos Natalino <carlos.natalino@chalmers.se>
+ */
+
+fn main() {
+    tonic_build::configure()
+        .build_server(false)
+        .compile(
+            &[
+                "proto/context.proto",
+                "proto/acl.proto",
+                "proto/kpi_sample_types.proto",
+                "proto/monitoring.proto",
+            ],
+            &["proto"],
+        )
+        .unwrap_or_else(|e| panic!("Failed to compile protos {:?}", e));
+}
diff --git a/src/tests/p4/probe/probe-tfs/connect_to_mininet.sh b/src/tests/p4/probe/probe-tfs/connect_to_mininet.sh
new file mode 100755
index 0000000000000000000000000000000000000000..bba3eaa9a985f3e546f9df2681879faef0a9b83e
--- /dev/null
+++ b/src/tests/p4/probe/probe-tfs/connect_to_mininet.sh
@@ -0,0 +1,16 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+CONTAINER=`docker ps | grep mininet | cut -f1 -d" "`
+docker exec -it $CONTAINER /bin/bash
diff --git a/src/tests/p4/probe/probe-tfs/deploy.sh b/src/tests/p4/probe/probe-tfs/deploy.sh
new file mode 100755
index 0000000000000000000000000000000000000000..733f02d11ecd4a9de90898b210b2fe9b579447f2
--- /dev/null
+++ b/src/tests/p4/probe/probe-tfs/deploy.sh
@@ -0,0 +1,37 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+# build the software
+# uncomment the line below if you want to build it
+# cargo build --release --target=x86_64-unknown-linux-musl
+
+# build a .env file with the info from context and monitoring services
+
+if [ -z "${CONTEXTSERVICE_SERVICE_HOST}" ] || [ -z "${CONTEXTSERVICE_SERVICE_PORT_GRPC}" ] || \
+   [ -z "${MONITORINGSERVICE_SERVICE_HOST}" ] || [ -z "${MONITORINGSERVICE_SERVICE_PORT_GRPC}" ]
+then
+    echo "TFS_ENV_VARS are not loaded."
+    exit 1
+fi
+
+echo "CONTEXTSERVICE_SERVICE_HOST=${CONTEXTSERVICE_SERVICE_HOST}" > .env
+echo "CONTEXTSERVICE_SERVICE_PORT_GRPC=${CONTEXTSERVICE_SERVICE_PORT_GRPC}" >> .env
+echo "MONITORINGSERVICE_SERVICE_HOST=${MONITORINGSERVICE_SERVICE_HOST}" >> .env
+echo "MONITORINGSERVICE_SERVICE_PORT_GRPC=${MONITORINGSERVICE_SERVICE_PORT_GRPC}" >> .env
+
+# get container id
+CONTAINER=`docker ps | grep mininet | cut -f1 -d" "`
+docker cp target/x86_64-unknown-linux-musl/release/tfsping $CONTAINER:/root
+docker cp target/x86_64-unknown-linux-musl/release/tfsagent $CONTAINER:/root
+docker cp .env $CONTAINER:/root
diff --git a/src/tests/p4/probe/probe-tfs/proto b/src/tests/p4/probe/probe-tfs/proto
new file mode 120000
index 0000000000000000000000000000000000000000..ce803d6a96f0064d107428238b9beecb2a0ed2be
--- /dev/null
+++ b/src/tests/p4/probe/probe-tfs/proto
@@ -0,0 +1 @@
+../../../../../proto
\ No newline at end of file
diff --git a/src/tests/p4/probe/probe-tfs/src/agent.rs b/src/tests/p4/probe/probe-tfs/src/agent.rs
new file mode 100644
index 0000000000000000000000000000000000000000..4221cbe28ba75021d2b7c2de6dbef46a043cc2bb
--- /dev/null
+++ b/src/tests/p4/probe/probe-tfs/src/agent.rs
@@ -0,0 +1,254 @@
+/**
+ * Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+ *
+ * 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.
+ *
+ * Program that starts the ping probe and reports it to the Unix socket.
+ *
+ * Author: Carlos Natalino <carlos.natalino@chalmers.se>
+ */
+
+/************** Modules needed to communicate with TeraFlowSDN ***************/
+pub mod kpi_sample_types {
+    tonic::include_proto!("kpi_sample_types");
+}
+
+pub mod acl {
+    tonic::include_proto!("acl");
+}
+
+pub mod context {
+    // tonic::include_proto!();
+    tonic::include_proto!("context");
+}
+
+pub mod monitoring {
+    tonic::include_proto!("monitoring");
+}
+
+/********************************** Imports **********************************/
+// standard library
+use std::env;
+use std::path::Path;
+use std::sync::Arc;
+use std::time::SystemTime;
+use std::{fs, io};
+
+// external libraries
+use dotenv::dotenv;
+use futures;
+use futures::lock::Mutex;
+use tokio::net::UnixListener;
+
+// proto
+use context::context_service_client::ContextServiceClient;
+use context::{Empty, Timestamp};
+use kpi_sample_types::KpiSampleType;
+use monitoring::monitoring_service_client::MonitoringServiceClient;
+use monitoring::{Kpi, KpiDescriptor, KpiValue};
+
+#[tokio::main]
+async fn main() -> Result<(), Box<dyn std::error::Error>> {
+    dotenv().ok(); // load the environment variables from the .env file
+
+    let path = Path::new("/tmp/tfsping");
+
+    if path.exists() {
+        fs::remove_file(path)?; // removes the socket in case it exists
+    }
+
+    let listener = UnixListener::bind(path).unwrap();
+    println!("Bound to the path {:?}", path);
+
+    // ARC Mutex that tells whether or not to send the results to the monitoring component
+    let send_ping = Arc::new(Mutex::new(false));
+    // copy used by the task that receives data from the probe
+    let ping_probe = send_ping.clone();
+    // copy used by the task that receives stream data from TFS
+    let ping_trigger = send_ping.clone();
+
+    // ARC mutex that hosts the KPI ID to be used as the monitoring KPI
+    let kpi_id: Arc<Mutex<Option<monitoring::KpiId>>> = Arc::new(Mutex::new(None));
+    let kpi_id_probe = kpi_id.clone();
+    let kpi_id_trigger = kpi_id.clone();
+
+    let t1 = tokio::spawn(async move {
+        let monitoring_host = env::var("MONITORINGSERVICE_SERVICE_HOST")
+            .unwrap_or_else(|_| panic!("receiver: Could not find monitoring host!"));
+        let monitoring_port = env::var("MONITORINGSERVICE_SERVICE_PORT_GRPC")
+            .unwrap_or_else(|_| panic!("receiver: Could not find monitoring port!"));
+
+        let mut monitoring_client = MonitoringServiceClient::connect(format!(
+            "http://{}:{}",
+            monitoring_host, monitoring_port
+        ))
+        .await
+        .unwrap();
+        println!("receiver: Connected to the monitoring service!");
+        loop {
+            println!("receiver: Awaiting for new connection!");
+            let (stream, _socket) = listener.accept().await.unwrap();
+
+            stream.readable().await.unwrap();
+
+            let mut buf = [0; 4];
+
+            match stream.try_read(&mut buf) {
+                Ok(n) => {
+                    let num = u32::from_be_bytes(buf);
+                    println!("receiver: read {} bytes -- {:?}", n, num);
+
+                    let should_ping = ping_probe.lock().await;
+
+                    if *should_ping {
+                        // only send the value to monitoring if needed
+                        // send the value to the monitoring component
+                        println!("receiver: Send value to monitoring");
+
+                        let kpi_id = kpi_id_probe.lock().await;
+                        println!("receiver: kpi id: {:?}", kpi_id);
+
+                        let now = SystemTime::now()
+                            .duration_since(SystemTime::UNIX_EPOCH)
+                            .unwrap()
+                            .as_secs(); // See struct std::time::Duration methods
+
+                        let kpi = Kpi {
+                            kpi_id: kpi_id.clone(),
+                            timestamp: Some(Timestamp {
+                                timestamp: now as f64,
+                            }),
+                            kpi_value: Some(KpiValue {
+                                value: Some(monitoring::kpi_value::Value::Int32Val(num as i32)),
+                            }),
+                        };
+                        // println!("Request: {:?}", kpi);
+                        let response = monitoring_client
+                            .include_kpi(tonic::Request::new(kpi))
+                            .await;
+                        // println!("Response: {:?}", response);
+                        if response.is_err() {
+                            println!("receiver: Issue with the response from monitoring!");
+                        }
+                    }
+                }
+                Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
+                    continue;
+                }
+                Err(e) => {
+                    println!("receiver: {:?}", e);
+                }
+            }
+        }
+    });
+
+    let t2 = tokio::spawn(async move {
+        // let server_address = "129.16.37.136";
+        let context_host = env::var("CONTEXTSERVICE_SERVICE_HOST")
+            .unwrap_or_else(|_| panic!("stream: Could not find context host!"));
+        let context_port = env::var("CONTEXTSERVICE_SERVICE_PORT_GRPC")
+            .unwrap_or_else(|_| panic!("stream: Could not find context port!"));
+
+        let monitoring_host = env::var("MONITORINGSERVICE_SERVICE_HOST")
+            .unwrap_or_else(|_| panic!("stream: Could not find monitoring host!"));
+        let monitoring_port = env::var("MONITORINGSERVICE_SERVICE_PORT_GRPC")
+            .unwrap_or_else(|_| panic!("stream: Could not find monitoring port!"));
+
+        let mut context_client =
+            ContextServiceClient::connect(format!("http://{}:{}", context_host, context_port))
+                .await
+                .unwrap();
+        println!("stream: Connected to the context service!");
+
+        let mut monitoring_client = MonitoringServiceClient::connect(format!(
+            "http://{}:{}",
+            monitoring_host, monitoring_port
+        ))
+        .await
+        .unwrap();
+        println!("stream: Connected to the monitoring service!");
+
+        let mut service_event_stream = context_client
+            .get_service_events(tonic::Request::new(Empty {}))
+            .await
+            .unwrap()
+            .into_inner();
+        while let Some(event) = service_event_stream.message().await.unwrap() {
+            let event_service = event.clone().service_id.unwrap();
+            if event.event.clone().unwrap().event_type == 1 {
+                println!("stream: New CREATE event:\n{:?}", event_service);
+
+                let kpi_descriptor = KpiDescriptor {
+                    kpi_id: None,
+                    kpi_id_list: vec![],
+                    device_id: None,
+                    endpoint_id: None,
+                    slice_id: None,
+                    connection_id: None,
+                    kpi_description: format!(
+                        "Latency value for service {}",
+                        event_service.service_uuid.unwrap().uuid
+                    ),
+                    service_id: Some(event.clone().service_id.clone().unwrap().clone()),
+                    kpi_sample_type: KpiSampleType::KpisampletypeUnknown.into(),
+                };
+
+                let _response = monitoring_client
+                    .set_kpi(tonic::Request::new(kpi_descriptor))
+                    .await
+                    .unwrap()
+                    .into_inner();
+                let mut kpi_id = kpi_id_trigger.lock().await;
+                println!("stream: KPI ID: {:?}", _response);
+                *kpi_id = Some(_response.clone());
+                let mut should_ping = ping_trigger.lock().await;
+                *should_ping = true;
+            } else if event.event.clone().unwrap().event_type == 3 {
+                println!("stream: New REMOVE event:\n{:?}", event);
+                let mut should_ping = ping_trigger.lock().await;
+                *should_ping = false;
+            }
+        }
+    });
+
+    futures::future::join_all(vec![t1, t2]).await;
+
+    // let addr = "10.0.0.2".parse().unwrap();
+    // let timeout = Duration::from_secs(1);
+    // ping::ping(addr, Some(timeout), Some(166), Some(3), Some(5), Some(&random())).unwrap();
+
+    // let server_address = env::var("CONTEXTSERVICE_SERVICE_HOST").unwrap();
+
+    // let contexts = grpc_client.list_context_ids(tonic::Request::new(Empty {  })).await?;
+
+    // println!("{:?}", contexts.into_inner());
+    // let current_context = contexts.into_inner().context_ids[0].clone();
+
+    // if let Some(current_context) = contexts.into_inner().context_ids[0] {
+
+    // }
+    // else {
+    //     panic!("No context available!");
+    // }
+
+    // for context in contexts.into_inner().context_ids {
+    //     println!("{:?}", context);
+    // }
+
+    // let services = grpc_client.list_services(tonic::Request::new(current_context)).await?;
+    // println!("{:?}", services.into_inner());
+
+    println!("Hello, world!");
+
+    Ok(())
+}
diff --git a/src/tests/p4/probe/probe-tfs/src/ping.rs b/src/tests/p4/probe/probe-tfs/src/ping.rs
new file mode 100644
index 0000000000000000000000000000000000000000..3c118c98782a4cb5def9a654edbe55186bbf3df7
--- /dev/null
+++ b/src/tests/p4/probe/probe-tfs/src/ping.rs
@@ -0,0 +1,71 @@
+/**
+ * Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+ *
+ * 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.
+ *
+ * Program that starts the ping probe and reports it to the Unix socket.
+ *
+ * Author: Carlos Natalino <carlos.natalino@chalmers.se>
+ */
+// standard library
+use std::io;
+use std::path::Path;
+
+// external libraries
+use tokio::net::UnixStream;
+use tokio::time::{sleep, Duration};
+
+async fn send_value(path: &Path, value: i32) -> Result<(), Box<dyn std::error::Error>> {
+    let stream = UnixStream::connect(path).await?;
+    stream.writable().await;
+    // if ready.is_writable() {
+    match stream.try_write(&i32::to_be_bytes(value)) {
+        Ok(n) => {
+            println!("\twrite {} bytes\t{}", n, value);
+        }
+        Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
+            println!("Error would block!");
+        }
+        Err(e) => {
+            println!("error into()");
+            return Err(e.into());
+        }
+    }
+    // }
+    Ok(())
+}
+
+#[tokio::main]
+async fn main() -> Result<(), Box<dyn std::error::Error>> {
+    let path = Path::new("/tmp/tfsping");
+
+    loop {
+        let payload = [0; 1024];
+
+        let result = surge_ping::ping("10.0.0.2".parse()?, &payload).await;
+
+        // let (_packet, duration) = result.unwra
+
+        if let Ok((_packet, duration)) = result {
+            println!("Ping took {:.3?}\t{:?}", duration, _packet.get_identifier());
+            send_value(&path, duration.as_micros() as i32).await?;
+        } else {
+            println!("Error!");
+            send_value(&path, -1).await?;
+        }
+
+        sleep(Duration::from_secs(2)).await;
+    }
+
+    // Ok(())  // unreachable
+}
diff --git a/src/tests/p4/probe/probe-tfs/target/x86_64-unknown-linux-musl/release/tfsagent b/src/tests/p4/probe/probe-tfs/target/x86_64-unknown-linux-musl/release/tfsagent
new file mode 100755
index 0000000000000000000000000000000000000000..b7cef11a433c6bf2eeb94638fa90d93f25acd3c8
Binary files /dev/null and b/src/tests/p4/probe/probe-tfs/target/x86_64-unknown-linux-musl/release/tfsagent differ
diff --git a/src/tests/p4/probe/probe-tfs/target/x86_64-unknown-linux-musl/release/tfsping b/src/tests/p4/probe/probe-tfs/target/x86_64-unknown-linux-musl/release/tfsping
new file mode 100755
index 0000000000000000000000000000000000000000..6e943d292dd6653e857bf5eea3258d38ad246026
Binary files /dev/null and b/src/tests/p4/probe/probe-tfs/target/x86_64-unknown-linux-musl/release/tfsping differ
diff --git a/src/tests/p4/tests/Objects.py b/src/tests/p4/tests/Objects.py
index 29f01cd61aca58712cb0bc27b7f80c04b2f37d52..9a9b230170fb492e94bac7cb19172f623daa3394 100644
--- a/src/tests/p4/tests/Objects.py
+++ b/src/tests/p4/tests/Objects.py
@@ -59,7 +59,7 @@ DEVICE_SW1                  = json_device_p4_disabled(DEVICE_SW1_UUID)
 
 DEVICE_SW1_DPID             = 1
 DEVICE_SW1_NAME             = DEVICE_SW1_UUID
-DEVICE_SW1_IP_ADDR          = '10.0.2.10'
+DEVICE_SW1_IP_ADDR          = '192.168.6.38'
 DEVICE_SW1_PORT             = '50001'
 DEVICE_SW1_VENDOR           = 'Open Networking Foundation'
 DEVICE_SW1_HW_VER           = 'BMv2 simple_switch'
@@ -68,12 +68,13 @@ DEVICE_SW1_SW_VER           = 'Stratum'
 DEVICE_SW1_BIN_PATH         = '/root/p4/bmv2.json'
 DEVICE_SW1_INFO_PATH        = '/root/p4/p4info.txt'
 
-DEVICE_SW1_ENDPOINT_DEFS    = [('1', 'port', []), ('2', 'port', []), ('3', 'port', [])]
+DEVICE_SW1_ENDPOINT_DEFS    = [('1', 'port', []), ('2', 'port', []), ('3', 'port', []), ('4', 'port', [])]
 DEVICE_SW1_ENDPOINTS        = json_endpoints(DEVICE_SW1_ID, DEVICE_SW1_ENDPOINT_DEFS)
 DEVICE_SW1_ENDPOINT_IDS     = json_endpoint_ids(DEVICE_SW1_ID, DEVICE_SW1_ENDPOINT_DEFS)
 ENDPOINT_ID_SW1_1           = DEVICE_SW1_ENDPOINTS[0]['endpoint_id']
 ENDPOINT_ID_SW1_2           = DEVICE_SW1_ENDPOINTS[1]['endpoint_id']
 ENDPOINT_ID_SW1_3           = DEVICE_SW1_ENDPOINTS[2]['endpoint_id']
+ENDPOINT_ID_SW1_4           = DEVICE_SW1_ENDPOINTS[3]['endpoint_id']
 
 DEVICE_SW1_CONNECT_RULES    = json_device_connect_rules(
     DEVICE_SW1_IP_ADDR,
@@ -97,7 +98,7 @@ DEVICE_SW2                  = json_device_p4_disabled(DEVICE_SW2_UUID)
 
 DEVICE_SW2_DPID             = 1
 DEVICE_SW2_NAME             = DEVICE_SW2_UUID
-DEVICE_SW2_IP_ADDR          = '10.0.2.10'
+DEVICE_SW2_IP_ADDR          = '192.168.6.38'
 DEVICE_SW2_PORT             = '50002'
 DEVICE_SW2_VENDOR           = 'Open Networking Foundation'
 DEVICE_SW2_HW_VER           = 'BMv2 simple_switch'
@@ -134,7 +135,7 @@ DEVICE_SW3                  = json_device_p4_disabled(DEVICE_SW3_UUID)
 
 DEVICE_SW3_DPID             = 1
 DEVICE_SW3_NAME             = DEVICE_SW3_UUID
-DEVICE_SW3_IP_ADDR          = '10.0.2.10'
+DEVICE_SW3_IP_ADDR          = '192.168.6.38'
 DEVICE_SW3_PORT             = '50003'
 DEVICE_SW3_VENDOR           = 'Open Networking Foundation'
 DEVICE_SW3_HW_VER           = 'BMv2 simple_switch'
@@ -171,7 +172,7 @@ DEVICE_SW4                  = json_device_p4_disabled(DEVICE_SW4_UUID)
 
 DEVICE_SW4_DPID             = 1
 DEVICE_SW4_NAME             = DEVICE_SW4_UUID
-DEVICE_SW4_IP_ADDR          = '10.0.2.10'
+DEVICE_SW4_IP_ADDR          = '192.168.6.38'
 DEVICE_SW4_PORT             = '50004'
 DEVICE_SW4_VENDOR           = 'Open Networking Foundation'
 DEVICE_SW4_HW_VER           = 'BMv2 simple_switch'
@@ -208,7 +209,7 @@ DEVICE_SW5                  = json_device_p4_disabled(DEVICE_SW5_UUID)
 
 DEVICE_SW5_DPID             = 1
 DEVICE_SW5_NAME             = DEVICE_SW5_UUID
-DEVICE_SW5_IP_ADDR          = '10.0.2.10'
+DEVICE_SW5_IP_ADDR          = '192.168.6.38'
 DEVICE_SW5_PORT             = '50005'
 DEVICE_SW5_VENDOR           = 'Open Networking Foundation'
 DEVICE_SW5_HW_VER           = 'BMv2 simple_switch'
@@ -245,7 +246,7 @@ DEVICE_SW6                  = json_device_p4_disabled(DEVICE_SW6_UUID)
 
 DEVICE_SW6_DPID             = 1
 DEVICE_SW6_NAME             = DEVICE_SW6_UUID
-DEVICE_SW6_IP_ADDR          = '10.0.2.10'
+DEVICE_SW6_IP_ADDR          = '192.168.6.38'
 DEVICE_SW6_PORT             = '50006'
 DEVICE_SW6_VENDOR           = 'Open Networking Foundation'
 DEVICE_SW6_HW_VER           = 'BMv2 simple_switch'
@@ -254,12 +255,11 @@ DEVICE_SW6_SW_VER           = 'Stratum'
 DEVICE_SW6_BIN_PATH         = '/root/p4/bmv2.json'
 DEVICE_SW6_INFO_PATH        = '/root/p4/p4info.txt'
 
-DEVICE_SW6_ENDPOINT_DEFS    = [('1', 'port', []), ('2', 'port', []), ('3', 'port', [])]
+DEVICE_SW6_ENDPOINT_DEFS    = [('1', 'port', []), ('2', 'port', [])]
 DEVICE_SW6_ENDPOINTS        = json_endpoints(DEVICE_SW6_ID, DEVICE_SW6_ENDPOINT_DEFS)
 DEVICE_SW6_ENDPOINT_IDS     = json_endpoint_ids(DEVICE_SW6_ID, DEVICE_SW6_ENDPOINT_DEFS)
 ENDPOINT_ID_SW6_1           = DEVICE_SW6_ENDPOINTS[0]['endpoint_id']
 ENDPOINT_ID_SW6_2           = DEVICE_SW6_ENDPOINTS[1]['endpoint_id']
-ENDPOINT_ID_SW6_3           = DEVICE_SW6_ENDPOINTS[2]['endpoint_id']
 
 DEVICE_SW6_CONNECT_RULES    = json_device_connect_rules(
     DEVICE_SW6_IP_ADDR,
@@ -276,42 +276,182 @@ DEVICE_SW6_CONNECT_RULES    = json_device_connect_rules(
     }
 )
 
+DEVICE_SW7_UUID             = 'SW7'
+DEVICE_SW7_TIMEOUT          = 60
+DEVICE_SW7_ID               = json_device_id(DEVICE_SW7_UUID)
+DEVICE_SW7                  = json_device_p4_disabled(DEVICE_SW7_UUID)
+
+DEVICE_SW7_DPID             = 1
+DEVICE_SW7_NAME             = DEVICE_SW7_UUID
+DEVICE_SW7_IP_ADDR          = '192.168.6.38'
+DEVICE_SW7_PORT             = '50007'
+DEVICE_SW7_VENDOR           = 'Open Networking Foundation'
+DEVICE_SW7_HW_VER           = 'BMv2 simple_switch'
+DEVICE_SW7_SW_VER           = 'Stratum'
+
+DEVICE_SW7_BIN_PATH         = '/root/p4/bmv2.json'
+DEVICE_SW7_INFO_PATH        = '/root/p4/p4info.txt'
+
+DEVICE_SW7_ENDPOINT_DEFS    = [('1', 'port', []), ('2', 'port', [])]
+DEVICE_SW7_ENDPOINTS        = json_endpoints(DEVICE_SW7_ID, DEVICE_SW7_ENDPOINT_DEFS)
+DEVICE_SW7_ENDPOINT_IDS     = json_endpoint_ids(DEVICE_SW7_ID, DEVICE_SW7_ENDPOINT_DEFS)
+ENDPOINT_ID_SW7_1           = DEVICE_SW7_ENDPOINTS[0]['endpoint_id']
+ENDPOINT_ID_SW7_2           = DEVICE_SW7_ENDPOINTS[1]['endpoint_id']
+
+DEVICE_SW7_CONNECT_RULES    = json_device_connect_rules(
+    DEVICE_SW7_IP_ADDR,
+    DEVICE_SW7_PORT,
+    {
+        'id':       DEVICE_SW7_DPID,
+        'name':     DEVICE_SW7_NAME,
+        'vendor':   DEVICE_SW7_VENDOR,
+        'hw_ver':   DEVICE_SW7_HW_VER,
+        'sw_ver':   DEVICE_SW7_SW_VER,
+        'timeout':  DEVICE_SW7_TIMEOUT,
+        'p4bin':    DEVICE_SW7_BIN_PATH,
+        'p4info':   DEVICE_SW7_INFO_PATH
+    }
+)
+
+DEVICE_SW8_UUID             = 'SW8'
+DEVICE_SW8_TIMEOUT          = 60
+DEVICE_SW8_ID               = json_device_id(DEVICE_SW8_UUID)
+DEVICE_SW8                  = json_device_p4_disabled(DEVICE_SW8_UUID)
+
+DEVICE_SW8_DPID             = 1
+DEVICE_SW8_NAME             = DEVICE_SW8_UUID
+DEVICE_SW8_IP_ADDR          = '192.168.6.38'
+DEVICE_SW8_PORT             = '50008'
+DEVICE_SW8_VENDOR           = 'Open Networking Foundation'
+DEVICE_SW8_HW_VER           = 'BMv2 simple_switch'
+DEVICE_SW8_SW_VER           = 'Stratum'
+
+DEVICE_SW8_BIN_PATH         = '/root/p4/bmv2.json'
+DEVICE_SW8_INFO_PATH        = '/root/p4/p4info.txt'
+
+DEVICE_SW8_ENDPOINT_DEFS    = [('1', 'port', []), ('2', 'port', []), ('3', 'port', []), ('4', 'port', [])]
+DEVICE_SW8_ENDPOINTS        = json_endpoints(DEVICE_SW8_ID, DEVICE_SW8_ENDPOINT_DEFS)
+DEVICE_SW8_ENDPOINT_IDS     = json_endpoint_ids(DEVICE_SW8_ID, DEVICE_SW8_ENDPOINT_DEFS)
+ENDPOINT_ID_SW8_1           = DEVICE_SW8_ENDPOINTS[0]['endpoint_id']
+ENDPOINT_ID_SW8_2           = DEVICE_SW8_ENDPOINTS[1]['endpoint_id']
+ENDPOINT_ID_SW8_3           = DEVICE_SW8_ENDPOINTS[2]['endpoint_id']
+ENDPOINT_ID_SW8_4           = DEVICE_SW8_ENDPOINTS[3]['endpoint_id']
+
+DEVICE_SW8_CONNECT_RULES    = json_device_connect_rules(
+    DEVICE_SW8_IP_ADDR,
+    DEVICE_SW8_PORT,
+    {
+        'id':       DEVICE_SW8_DPID,
+        'name':     DEVICE_SW8_NAME,
+        'vendor':   DEVICE_SW8_VENDOR,
+        'hw_ver':   DEVICE_SW8_HW_VER,
+        'sw_ver':   DEVICE_SW8_SW_VER,
+        'timeout':  DEVICE_SW8_TIMEOUT,
+        'p4bin':    DEVICE_SW8_BIN_PATH,
+        'p4info':   DEVICE_SW8_INFO_PATH
+    }
+)
+
 # ----- Links ----------------------------------------------------------------------------------------------------------
+
+# Leftmost links (SW1-SW{2n})
+# SW1_1 - SW2_1
 LINK_SW1_SW2_UUID           = get_link_uuid(ENDPOINT_ID_SW1_1, ENDPOINT_ID_SW2_1)
 LINK_SW1_SW2_ID             = json_link_id(LINK_SW1_SW2_UUID)
 LINK_SW1_SW2                = json_link(LINK_SW1_SW2_UUID, [ENDPOINT_ID_SW1_1, ENDPOINT_ID_SW2_1])
 
-LINK_SW1_SW3_UUID           = get_link_uuid(ENDPOINT_ID_SW1_2, ENDPOINT_ID_SW3_1)
-LINK_SW1_SW3_ID             = json_link_id(LINK_SW1_SW3_UUID)
-LINK_SW1_SW3                = json_link(LINK_SW1_SW3_UUID, [ENDPOINT_ID_SW1_2, ENDPOINT_ID_SW3_1])
-
-LINK_SW2_SW4_UUID           = get_link_uuid(ENDPOINT_ID_SW2_2, ENDPOINT_ID_SW4_1)
-LINK_SW2_SW4_ID             = json_link_id(LINK_SW2_SW4_UUID)
-LINK_SW2_SW4                = json_link(LINK_SW2_SW4_UUID, [ENDPOINT_ID_SW2_2, ENDPOINT_ID_SW4_1])
-
-LINK_SW3_SW5_UUID           = get_link_uuid(ENDPOINT_ID_SW3_2, ENDPOINT_ID_SW5_1)
-LINK_SW3_SW5_ID             = json_link_id(LINK_SW3_SW5_UUID)
-LINK_SW3_SW5                = json_link(LINK_SW3_SW5_UUID, [ENDPOINT_ID_SW3_2, ENDPOINT_ID_SW5_1])
-
-LINK_SW4_SW6_UUID           = get_link_uuid(ENDPOINT_ID_SW4_2, ENDPOINT_ID_SW6_1)
-LINK_SW4_SW6_ID             = json_link_id(LINK_SW4_SW6_UUID)
-LINK_SW4_SW6                = json_link(LINK_SW4_SW6_UUID, [ENDPOINT_ID_SW4_2, ENDPOINT_ID_SW6_1])
-
-LINK_SW5_SW6_UUID           = get_link_uuid(ENDPOINT_ID_SW5_2, ENDPOINT_ID_SW6_2)
-LINK_SW5_SW6_ID             = json_link_id(LINK_SW5_SW6_UUID)
-LINK_SW5_SW6                = json_link(LINK_SW5_SW6_UUID, [ENDPOINT_ID_SW5_2, ENDPOINT_ID_SW6_2])
+# SW2_1 - SW1_1
+LINK_SW2_SW1_UUID           = get_link_uuid(ENDPOINT_ID_SW2_1, ENDPOINT_ID_SW1_1)
+LINK_SW2_SW1_ID             = json_link_id(LINK_SW2_SW1_UUID)
+LINK_SW2_SW1                = json_link(LINK_SW2_SW1_UUID, [ENDPOINT_ID_SW2_1, ENDPOINT_ID_SW1_1])
+
+# SW1_2 - SW4_1
+LINK_SW1_SW4_UUID           = get_link_uuid(ENDPOINT_ID_SW1_2, ENDPOINT_ID_SW4_1)
+LINK_SW1_SW4_ID             = json_link_id(LINK_SW1_SW4_UUID)
+LINK_SW1_SW4                = json_link(LINK_SW1_SW4_UUID, [ENDPOINT_ID_SW1_2, ENDPOINT_ID_SW4_1])
+
+# SW4_1 - SW1_2
+LINK_SW4_SW1_UUID           = get_link_uuid(ENDPOINT_ID_SW4_1, ENDPOINT_ID_SW1_2)
+LINK_SW4_SW1_ID             = json_link_id(LINK_SW4_SW1_UUID)
+LINK_SW4_SW1                = json_link(LINK_SW4_SW1_UUID, [ENDPOINT_ID_SW4_1, ENDPOINT_ID_SW1_2])
+
+# SW1_3 - SW6_1
+LINK_SW1_SW6_UUID           = get_link_uuid(ENDPOINT_ID_SW1_3, ENDPOINT_ID_SW6_1)
+LINK_SW1_SW6_ID             = json_link_id(LINK_SW1_SW6_UUID)
+LINK_SW1_SW6                = json_link(LINK_SW1_SW6_UUID, [ENDPOINT_ID_SW1_3, ENDPOINT_ID_SW6_1])
+
+# SW6_1 - SW1_3
+LINK_SW6_SW1_UUID           = get_link_uuid(ENDPOINT_ID_SW6_1, ENDPOINT_ID_SW1_3)
+LINK_SW6_SW1_ID             = json_link_id(LINK_SW6_SW1_UUID)
+LINK_SW6_SW1                = json_link(LINK_SW6_SW1_UUID, [ENDPOINT_ID_SW6_1, ENDPOINT_ID_SW1_3])
+
+# Middle links (SW{2n}-SW{2n+1})
+# SW2_2 - SW3_1
+LINK_SW2_SW3_UUID           = get_link_uuid(ENDPOINT_ID_SW2_2, ENDPOINT_ID_SW3_1)
+LINK_SW2_SW3_ID             = json_link_id(LINK_SW2_SW3_UUID)
+LINK_SW2_SW3                = json_link(LINK_SW2_SW3_UUID, [ENDPOINT_ID_SW2_2, ENDPOINT_ID_SW3_1])
+
+# SW3_1 - SW2_2
+LINK_SW3_SW2_UUID           = get_link_uuid(ENDPOINT_ID_SW3_1, ENDPOINT_ID_SW2_2)
+LINK_SW3_SW2_ID             = json_link_id(LINK_SW3_SW2_UUID)
+LINK_SW3_SW2                = json_link(LINK_SW3_SW2_UUID, [ENDPOINT_ID_SW3_1, ENDPOINT_ID_SW2_2])
+
+# SW4_2 - SW5_1
+LINK_SW4_SW5_UUID           = get_link_uuid(ENDPOINT_ID_SW4_2, ENDPOINT_ID_SW5_1)
+LINK_SW4_SW5_ID             = json_link_id(LINK_SW4_SW5_UUID)
+LINK_SW4_SW5                = json_link(LINK_SW4_SW5_UUID, [ENDPOINT_ID_SW4_2, ENDPOINT_ID_SW5_1])
+
+# SW5_1 - SW4_2
+LINK_SW5_SW4_UUID           = get_link_uuid(ENDPOINT_ID_SW5_1, ENDPOINT_ID_SW4_2)
+LINK_SW5_SW4_ID             = json_link_id(LINK_SW5_SW4_UUID)
+LINK_SW5_SW4                = json_link(LINK_SW5_SW4_UUID, [ENDPOINT_ID_SW5_1, ENDPOINT_ID_SW4_2])
+
+# SW6_2 - SW7_1
+LINK_SW6_SW7_UUID           = get_link_uuid(ENDPOINT_ID_SW6_2, ENDPOINT_ID_SW7_1)
+LINK_SW6_SW7_ID             = json_link_id(LINK_SW6_SW7_UUID)
+LINK_SW6_SW7                = json_link(LINK_SW6_SW7_UUID, [ENDPOINT_ID_SW6_2, ENDPOINT_ID_SW7_1])
+
+# SW7_1 - SW6_2
+LINK_SW7_SW6_UUID           = get_link_uuid(ENDPOINT_ID_SW7_1, ENDPOINT_ID_SW6_2)
+LINK_SW7_SW6_ID             = json_link_id(LINK_SW7_SW6_UUID)
+LINK_SW7_SW6                = json_link(LINK_SW7_SW6_UUID, [ENDPOINT_ID_SW7_1, ENDPOINT_ID_SW6_2])
+
+# Rightmost links (SW{2n+1}-SW8)
+# SW3_2 - SW8_1
+LINK_SW3_SW8_UUID           = get_link_uuid(ENDPOINT_ID_SW3_2, ENDPOINT_ID_SW8_1)
+LINK_SW3_SW8_ID             = json_link_id(LINK_SW3_SW8_UUID)
+LINK_SW3_SW8                = json_link(LINK_SW3_SW8_UUID, [ENDPOINT_ID_SW3_2, ENDPOINT_ID_SW8_1])
+
+# SW8_1 - SW3_2
+LINK_SW8_SW3_UUID           = get_link_uuid(ENDPOINT_ID_SW8_1, ENDPOINT_ID_SW3_2)
+LINK_SW8_SW3_ID             = json_link_id(LINK_SW8_SW3_UUID)
+LINK_SW8_SW3                = json_link(LINK_SW8_SW3_UUID, [ENDPOINT_ID_SW8_1, ENDPOINT_ID_SW3_2])
+
+# SW5_2 - SW8_2
+LINK_SW5_SW8_UUID           = get_link_uuid(ENDPOINT_ID_SW5_2, ENDPOINT_ID_SW8_2)
+LINK_SW5_SW8_ID             = json_link_id(LINK_SW5_SW8_UUID)
+LINK_SW5_SW8                = json_link(LINK_SW5_SW8_UUID, [ENDPOINT_ID_SW5_2, ENDPOINT_ID_SW8_2])
+
+# SW8_2 - SW8_2
+LINK_SW8_SW5_UUID           = get_link_uuid(ENDPOINT_ID_SW8_2, ENDPOINT_ID_SW5_2)
+LINK_SW8_SW5_ID             = json_link_id(LINK_SW8_SW5_UUID)
+LINK_SW8_SW5                = json_link(LINK_SW8_SW5_UUID, [ENDPOINT_ID_SW8_2, ENDPOINT_ID_SW5_2])
+
+# SW7_2 - SW8_3
+LINK_SW7_SW8_UUID           = get_link_uuid(ENDPOINT_ID_SW7_2, ENDPOINT_ID_SW8_3)
+LINK_SW7_SW8_ID             = json_link_id(LINK_SW7_SW8_UUID)
+LINK_SW7_SW8                = json_link(LINK_SW7_SW8_UUID, [ENDPOINT_ID_SW7_2, ENDPOINT_ID_SW8_3])
+
+# SW8_3 - SW7_2
+LINK_SW8_SW7_UUID           = get_link_uuid(ENDPOINT_ID_SW8_3, ENDPOINT_ID_SW7_2)
+LINK_SW8_SW7_ID             = json_link_id(LINK_SW8_SW7_UUID)
+LINK_SW8_SW7                = json_link(LINK_SW8_SW7_UUID, [ENDPOINT_ID_SW8_3, ENDPOINT_ID_SW7_2])
 
 # ----- Service ----------------------------------------------------------------------------------------------------------
 
-#SERVICE_SW1_UUID        = get_service_uuid(ENDPOINT_ID_SW1_1, ENDPOINT_ID_SW1_2)
-#SERVICE_SW1             = json_service_p4_planned(SERVICE_SW1_UUID)
-
-#SERVICE_SW2_UUID        = get_service_uuid(ENDPOINT_ID_SW2_1, ENDPOINT_ID_SW2_2)
-#SERVICE_SW2             = json_service_p4_planned(SERVICE_SW2_UUID)
-
-SERVICE_SW1_SW6_UUID            = get_service_uuid(ENDPOINT_ID_SW1_3, ENDPOINT_ID_SW6_3)
-SERVICE_SW1_SW6                 = json_service_p4_planned(SERVICE_SW1_SW6_UUID)
-SERVICE_SW1_SW6_ENDPOINT_IDS    = [DEVICE_SW1_ENDPOINT_IDS[2], DEVICE_SW6_ENDPOINT_IDS[2]]
+SERVICE_SW1_SW8_UUID          = get_service_uuid(ENDPOINT_ID_SW1_4, ENDPOINT_ID_SW8_4)
+SERVICE_SW1_SW8               = json_service_p4_planned(SERVICE_SW1_SW8_UUID)
+SERVICE_SW1_SW8_ENDPOINT_IDS  = [DEVICE_SW1_ENDPOINT_IDS[3], DEVICE_SW8_ENDPOINT_IDS[3]]
 
 # ----- Object Collections ---------------------------------------------------------------------------------------------
 
@@ -325,21 +465,36 @@ DEVICES = [
     (DEVICE_SW4, DEVICE_SW4_CONNECT_RULES, DEVICE_SW4_ENDPOINTS),
     (DEVICE_SW5, DEVICE_SW5_CONNECT_RULES, DEVICE_SW5_ENDPOINTS),
     (DEVICE_SW6, DEVICE_SW6_CONNECT_RULES, DEVICE_SW6_ENDPOINTS),
+    (DEVICE_SW7, DEVICE_SW7_CONNECT_RULES, DEVICE_SW7_ENDPOINTS),
+    (DEVICE_SW8, DEVICE_SW8_CONNECT_RULES, DEVICE_SW8_ENDPOINTS),
 ]
 
 LINKS = [
     LINK_SW1_SW2,
-    LINK_SW1_SW3,
+    LINK_SW1_SW4,
+    LINK_SW1_SW6,
 
-    LINK_SW2_SW4,
-    LINK_SW3_SW5,
+    LINK_SW2_SW3,
+    LINK_SW4_SW5,
+    LINK_SW6_SW7,
 
-    LINK_SW4_SW6,
-    LINK_SW5_SW6
-    ] 
+    LINK_SW3_SW8,
+    LINK_SW5_SW8,
+    LINK_SW7_SW8,
 
-#SERVICES = [(SERVICE_SW1, DEVICE_SW1_ENDPOINT_IDS), (SERVICE_SW2, DEVICE_SW2_ENDPOINT_IDS)]
+    LINK_SW2_SW1,
+    LINK_SW4_SW1,
+    LINK_SW6_SW1,
 
-#SERVICE_SW1_SW2_ENDPOINT_IDS = DEVICE_SW1_ENDPOINT_IDS + DEVICE_SW2_ENDPOINT_IDS
+    LINK_SW3_SW2,
+    LINK_SW5_SW4,
+    LINK_SW7_SW6,
 
-SERVICES = [(SERVICE_SW1_SW6, SERVICE_SW1_SW6_ENDPOINT_IDS)]
\ No newline at end of file
+    LINK_SW8_SW3,
+    LINK_SW8_SW5,
+    LINK_SW8_SW7,
+] 
+
+SERVICES = [
+    (SERVICE_SW1_SW8, SERVICE_SW1_SW8_ENDPOINT_IDS),
+]
diff --git a/src/tests/p4/tests/topologies/6switchObjects.py b/src/tests/p4/tests/topologies/6switchObjects.py
new file mode 100644
index 0000000000000000000000000000000000000000..29f01cd61aca58712cb0bc27b7f80c04b2f37d52
--- /dev/null
+++ b/src/tests/p4/tests/topologies/6switchObjects.py
@@ -0,0 +1,345 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+import os
+from typing import Dict, List, Tuple
+from common.Constants import DEFAULT_CONTEXT_NAME, DEFAULT_TOPOLOGY_NAME
+from common.tools.object_factory.Context import json_context, json_context_id
+from common.tools.object_factory.Device import (
+    json_device_connect_rules, json_device_emulated_connect_rules, json_device_emulated_packet_router_disabled,
+    json_device_connect_rules, json_device_id, json_device_p4_disabled,
+    json_device_emulated_tapi_disabled, json_device_id, json_device_packetrouter_disabled, json_device_tapi_disabled)
+from common.tools.object_factory.Service import (
+    get_service_uuid, json_service_l3nm_planned,json_service_p4_planned)
+from common.tools.object_factory.ConfigRule import (
+    json_config_rule_set, json_config_rule_delete)
+from common.tools.object_factory.EndPoint import json_endpoint, json_endpoint_ids, json_endpoints, json_endpoint_id
+from common.tools.object_factory.Link import get_link_uuid, json_link, json_link_id
+from common.tools.object_factory.Topology import json_topology, json_topology_id
+from common.proto.kpi_sample_types_pb2 import KpiSampleType
+
+# ----- Context --------------------------------------------------------------------------------------------------------
+CONTEXT_ID = json_context_id(DEFAULT_CONTEXT_NAME)
+CONTEXT    = json_context(DEFAULT_CONTEXT_NAME)
+
+# ----- Topology -------------------------------------------------------------------------------------------------------
+TOPOLOGY_ID = json_topology_id(DEFAULT_TOPOLOGY_NAME, context_id=CONTEXT_ID)
+TOPOLOGY    = json_topology(DEFAULT_TOPOLOGY_NAME, context_id=CONTEXT_ID)
+
+# ----- Monitoring Samples ---------------------------------------------------------------------------------------------
+PACKET_PORT_SAMPLE_TYPES = [
+    KpiSampleType.KPISAMPLETYPE_PACKETS_TRANSMITTED,
+    KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED,
+    KpiSampleType.KPISAMPLETYPE_BYTES_TRANSMITTED,
+    KpiSampleType.KPISAMPLETYPE_BYTES_RECEIVED,
+]
+
+# ----- Device Credentials and Settings --------------------------------------------------------------------------------
+
+
+# ----- Devices --------------------------------------------------------------------------------------------------------
+
+CUR_PATH = os.path.dirname(os.path.abspath(__file__))
+
+DEVICE_SW1_UUID             = 'SW1'
+DEVICE_SW1_TIMEOUT          = 60
+DEVICE_SW1_ID               = json_device_id(DEVICE_SW1_UUID)
+DEVICE_SW1                  = json_device_p4_disabled(DEVICE_SW1_UUID)
+
+DEVICE_SW1_DPID             = 1
+DEVICE_SW1_NAME             = DEVICE_SW1_UUID
+DEVICE_SW1_IP_ADDR          = '10.0.2.10'
+DEVICE_SW1_PORT             = '50001'
+DEVICE_SW1_VENDOR           = 'Open Networking Foundation'
+DEVICE_SW1_HW_VER           = 'BMv2 simple_switch'
+DEVICE_SW1_SW_VER           = 'Stratum'
+
+DEVICE_SW1_BIN_PATH         = '/root/p4/bmv2.json'
+DEVICE_SW1_INFO_PATH        = '/root/p4/p4info.txt'
+
+DEVICE_SW1_ENDPOINT_DEFS    = [('1', 'port', []), ('2', 'port', []), ('3', 'port', [])]
+DEVICE_SW1_ENDPOINTS        = json_endpoints(DEVICE_SW1_ID, DEVICE_SW1_ENDPOINT_DEFS)
+DEVICE_SW1_ENDPOINT_IDS     = json_endpoint_ids(DEVICE_SW1_ID, DEVICE_SW1_ENDPOINT_DEFS)
+ENDPOINT_ID_SW1_1           = DEVICE_SW1_ENDPOINTS[0]['endpoint_id']
+ENDPOINT_ID_SW1_2           = DEVICE_SW1_ENDPOINTS[1]['endpoint_id']
+ENDPOINT_ID_SW1_3           = DEVICE_SW1_ENDPOINTS[2]['endpoint_id']
+
+DEVICE_SW1_CONNECT_RULES    = json_device_connect_rules(
+    DEVICE_SW1_IP_ADDR,
+    DEVICE_SW1_PORT,
+    {
+        'id':       DEVICE_SW1_DPID,
+        'name':     DEVICE_SW1_NAME,
+        'vendor':   DEVICE_SW1_VENDOR,
+        'hw_ver':   DEVICE_SW1_HW_VER,
+        'sw_ver':   DEVICE_SW1_SW_VER,
+        'timeout':  DEVICE_SW1_TIMEOUT,
+        'p4bin':    DEVICE_SW1_BIN_PATH,
+        'p4info':   DEVICE_SW1_INFO_PATH
+    }
+)
+
+DEVICE_SW2_UUID             = 'SW2'
+DEVICE_SW2_TIMEOUT          = 60
+DEVICE_SW2_ID               = json_device_id(DEVICE_SW2_UUID)
+DEVICE_SW2                  = json_device_p4_disabled(DEVICE_SW2_UUID)
+
+DEVICE_SW2_DPID             = 1
+DEVICE_SW2_NAME             = DEVICE_SW2_UUID
+DEVICE_SW2_IP_ADDR          = '10.0.2.10'
+DEVICE_SW2_PORT             = '50002'
+DEVICE_SW2_VENDOR           = 'Open Networking Foundation'
+DEVICE_SW2_HW_VER           = 'BMv2 simple_switch'
+DEVICE_SW2_SW_VER           = 'Stratum'
+
+DEVICE_SW2_BIN_PATH         = '/root/p4/bmv2.json'
+DEVICE_SW2_INFO_PATH        = '/root/p4/p4info.txt'
+
+DEVICE_SW2_ENDPOINT_DEFS    = [('1', 'port', []), ('2', 'port', [])]
+DEVICE_SW2_ENDPOINTS        = json_endpoints(DEVICE_SW2_ID, DEVICE_SW2_ENDPOINT_DEFS)
+DEVICE_SW2_ENDPOINT_IDS     = json_endpoint_ids(DEVICE_SW2_ID, DEVICE_SW2_ENDPOINT_DEFS)
+ENDPOINT_ID_SW2_1           = DEVICE_SW2_ENDPOINTS[0]['endpoint_id']
+ENDPOINT_ID_SW2_2           = DEVICE_SW2_ENDPOINTS[1]['endpoint_id']
+
+DEVICE_SW2_CONNECT_RULES    = json_device_connect_rules(
+    DEVICE_SW2_IP_ADDR,
+    DEVICE_SW2_PORT,
+    {
+        'id':       DEVICE_SW2_DPID,
+        'name':     DEVICE_SW2_NAME,
+        'vendor':   DEVICE_SW2_VENDOR,
+        'hw_ver':   DEVICE_SW2_HW_VER,
+        'sw_ver':   DEVICE_SW2_SW_VER,
+        'timeout':  DEVICE_SW2_TIMEOUT,
+        'p4bin':    DEVICE_SW2_BIN_PATH,
+        'p4info':   DEVICE_SW2_INFO_PATH
+    }
+)
+
+DEVICE_SW3_UUID             = 'SW3'
+DEVICE_SW3_TIMEOUT          = 60
+DEVICE_SW3_ID               = json_device_id(DEVICE_SW3_UUID)
+DEVICE_SW3                  = json_device_p4_disabled(DEVICE_SW3_UUID)
+
+DEVICE_SW3_DPID             = 1
+DEVICE_SW3_NAME             = DEVICE_SW3_UUID
+DEVICE_SW3_IP_ADDR          = '10.0.2.10'
+DEVICE_SW3_PORT             = '50003'
+DEVICE_SW3_VENDOR           = 'Open Networking Foundation'
+DEVICE_SW3_HW_VER           = 'BMv2 simple_switch'
+DEVICE_SW3_SW_VER           = 'Stratum'
+
+DEVICE_SW3_BIN_PATH         = '/root/p4/bmv2.json'
+DEVICE_SW3_INFO_PATH        = '/root/p4/p4info.txt'
+
+DEVICE_SW3_ENDPOINT_DEFS    = [('1', 'port', []), ('2', 'port', [])]
+DEVICE_SW3_ENDPOINTS        = json_endpoints(DEVICE_SW3_ID, DEVICE_SW3_ENDPOINT_DEFS)
+DEVICE_SW3_ENDPOINT_IDS     = json_endpoint_ids(DEVICE_SW3_ID, DEVICE_SW3_ENDPOINT_DEFS)
+ENDPOINT_ID_SW3_1           = DEVICE_SW3_ENDPOINTS[0]['endpoint_id']
+ENDPOINT_ID_SW3_2           = DEVICE_SW3_ENDPOINTS[1]['endpoint_id']
+
+DEVICE_SW3_CONNECT_RULES    = json_device_connect_rules(
+    DEVICE_SW3_IP_ADDR,
+    DEVICE_SW3_PORT,
+    {
+        'id':       DEVICE_SW3_DPID,
+        'name':     DEVICE_SW3_NAME,
+        'vendor':   DEVICE_SW3_VENDOR,
+        'hw_ver':   DEVICE_SW3_HW_VER,
+        'sw_ver':   DEVICE_SW3_SW_VER,
+        'timeout':  DEVICE_SW3_TIMEOUT,
+        'p4bin':    DEVICE_SW3_BIN_PATH,
+        'p4info':   DEVICE_SW3_INFO_PATH
+    }
+)
+
+DEVICE_SW4_UUID             = 'SW4'
+DEVICE_SW4_TIMEOUT          = 60
+DEVICE_SW4_ID               = json_device_id(DEVICE_SW4_UUID)
+DEVICE_SW4                  = json_device_p4_disabled(DEVICE_SW4_UUID)
+
+DEVICE_SW4_DPID             = 1
+DEVICE_SW4_NAME             = DEVICE_SW4_UUID
+DEVICE_SW4_IP_ADDR          = '10.0.2.10'
+DEVICE_SW4_PORT             = '50004'
+DEVICE_SW4_VENDOR           = 'Open Networking Foundation'
+DEVICE_SW4_HW_VER           = 'BMv2 simple_switch'
+DEVICE_SW4_SW_VER           = 'Stratum'
+
+DEVICE_SW4_BIN_PATH         = '/root/p4/bmv2.json'
+DEVICE_SW4_INFO_PATH        = '/root/p4/p4info.txt'
+
+DEVICE_SW4_ENDPOINT_DEFS    = [('1', 'port', []), ('2', 'port', [])]
+DEVICE_SW4_ENDPOINTS        = json_endpoints(DEVICE_SW4_ID, DEVICE_SW4_ENDPOINT_DEFS)
+DEVICE_SW4_ENDPOINT_IDS     = json_endpoint_ids(DEVICE_SW4_ID, DEVICE_SW4_ENDPOINT_DEFS)
+ENDPOINT_ID_SW4_1           = DEVICE_SW4_ENDPOINTS[0]['endpoint_id']
+ENDPOINT_ID_SW4_2           = DEVICE_SW4_ENDPOINTS[1]['endpoint_id']
+
+DEVICE_SW4_CONNECT_RULES    = json_device_connect_rules(
+    DEVICE_SW4_IP_ADDR,
+    DEVICE_SW4_PORT,
+    {
+        'id':       DEVICE_SW4_DPID,
+        'name':     DEVICE_SW4_NAME,
+        'vendor':   DEVICE_SW4_VENDOR,
+        'hw_ver':   DEVICE_SW4_HW_VER,
+        'sw_ver':   DEVICE_SW4_SW_VER,
+        'timeout':  DEVICE_SW4_TIMEOUT,
+        'p4bin':    DEVICE_SW4_BIN_PATH,
+        'p4info':   DEVICE_SW4_INFO_PATH
+    }
+)
+
+DEVICE_SW5_UUID             = 'SW5'
+DEVICE_SW5_TIMEOUT          = 60
+DEVICE_SW5_ID               = json_device_id(DEVICE_SW5_UUID)
+DEVICE_SW5                  = json_device_p4_disabled(DEVICE_SW5_UUID)
+
+DEVICE_SW5_DPID             = 1
+DEVICE_SW5_NAME             = DEVICE_SW5_UUID
+DEVICE_SW5_IP_ADDR          = '10.0.2.10'
+DEVICE_SW5_PORT             = '50005'
+DEVICE_SW5_VENDOR           = 'Open Networking Foundation'
+DEVICE_SW5_HW_VER           = 'BMv2 simple_switch'
+DEVICE_SW5_SW_VER           = 'Stratum'
+
+DEVICE_SW5_BIN_PATH         = '/root/p4/bmv2.json'
+DEVICE_SW5_INFO_PATH        = '/root/p4/p4info.txt'
+
+DEVICE_SW5_ENDPOINT_DEFS    = [('1', 'port', []), ('2', 'port', [])]
+DEVICE_SW5_ENDPOINTS        = json_endpoints(DEVICE_SW5_ID, DEVICE_SW5_ENDPOINT_DEFS)
+DEVICE_SW5_ENDPOINT_IDS     = json_endpoint_ids(DEVICE_SW5_ID, DEVICE_SW5_ENDPOINT_DEFS)
+ENDPOINT_ID_SW5_1           = DEVICE_SW5_ENDPOINTS[0]['endpoint_id']
+ENDPOINT_ID_SW5_2           = DEVICE_SW5_ENDPOINTS[1]['endpoint_id']
+
+DEVICE_SW5_CONNECT_RULES    = json_device_connect_rules(
+    DEVICE_SW5_IP_ADDR,
+    DEVICE_SW5_PORT,
+    {
+        'id':       DEVICE_SW5_DPID,
+        'name':     DEVICE_SW5_NAME,
+        'vendor':   DEVICE_SW5_VENDOR,
+        'hw_ver':   DEVICE_SW5_HW_VER,
+        'sw_ver':   DEVICE_SW5_SW_VER,
+        'timeout':  DEVICE_SW5_TIMEOUT,
+        'p4bin':    DEVICE_SW5_BIN_PATH,
+        'p4info':   DEVICE_SW5_INFO_PATH
+    }
+)
+
+DEVICE_SW6_UUID             = 'SW6'
+DEVICE_SW6_TIMEOUT          = 60
+DEVICE_SW6_ID               = json_device_id(DEVICE_SW6_UUID)
+DEVICE_SW6                  = json_device_p4_disabled(DEVICE_SW6_UUID)
+
+DEVICE_SW6_DPID             = 1
+DEVICE_SW6_NAME             = DEVICE_SW6_UUID
+DEVICE_SW6_IP_ADDR          = '10.0.2.10'
+DEVICE_SW6_PORT             = '50006'
+DEVICE_SW6_VENDOR           = 'Open Networking Foundation'
+DEVICE_SW6_HW_VER           = 'BMv2 simple_switch'
+DEVICE_SW6_SW_VER           = 'Stratum'
+
+DEVICE_SW6_BIN_PATH         = '/root/p4/bmv2.json'
+DEVICE_SW6_INFO_PATH        = '/root/p4/p4info.txt'
+
+DEVICE_SW6_ENDPOINT_DEFS    = [('1', 'port', []), ('2', 'port', []), ('3', 'port', [])]
+DEVICE_SW6_ENDPOINTS        = json_endpoints(DEVICE_SW6_ID, DEVICE_SW6_ENDPOINT_DEFS)
+DEVICE_SW6_ENDPOINT_IDS     = json_endpoint_ids(DEVICE_SW6_ID, DEVICE_SW6_ENDPOINT_DEFS)
+ENDPOINT_ID_SW6_1           = DEVICE_SW6_ENDPOINTS[0]['endpoint_id']
+ENDPOINT_ID_SW6_2           = DEVICE_SW6_ENDPOINTS[1]['endpoint_id']
+ENDPOINT_ID_SW6_3           = DEVICE_SW6_ENDPOINTS[2]['endpoint_id']
+
+DEVICE_SW6_CONNECT_RULES    = json_device_connect_rules(
+    DEVICE_SW6_IP_ADDR,
+    DEVICE_SW6_PORT,
+    {
+        'id':       DEVICE_SW6_DPID,
+        'name':     DEVICE_SW6_NAME,
+        'vendor':   DEVICE_SW6_VENDOR,
+        'hw_ver':   DEVICE_SW6_HW_VER,
+        'sw_ver':   DEVICE_SW6_SW_VER,
+        'timeout':  DEVICE_SW6_TIMEOUT,
+        'p4bin':    DEVICE_SW6_BIN_PATH,
+        'p4info':   DEVICE_SW6_INFO_PATH
+    }
+)
+
+# ----- Links ----------------------------------------------------------------------------------------------------------
+LINK_SW1_SW2_UUID           = get_link_uuid(ENDPOINT_ID_SW1_1, ENDPOINT_ID_SW2_1)
+LINK_SW1_SW2_ID             = json_link_id(LINK_SW1_SW2_UUID)
+LINK_SW1_SW2                = json_link(LINK_SW1_SW2_UUID, [ENDPOINT_ID_SW1_1, ENDPOINT_ID_SW2_1])
+
+LINK_SW1_SW3_UUID           = get_link_uuid(ENDPOINT_ID_SW1_2, ENDPOINT_ID_SW3_1)
+LINK_SW1_SW3_ID             = json_link_id(LINK_SW1_SW3_UUID)
+LINK_SW1_SW3                = json_link(LINK_SW1_SW3_UUID, [ENDPOINT_ID_SW1_2, ENDPOINT_ID_SW3_1])
+
+LINK_SW2_SW4_UUID           = get_link_uuid(ENDPOINT_ID_SW2_2, ENDPOINT_ID_SW4_1)
+LINK_SW2_SW4_ID             = json_link_id(LINK_SW2_SW4_UUID)
+LINK_SW2_SW4                = json_link(LINK_SW2_SW4_UUID, [ENDPOINT_ID_SW2_2, ENDPOINT_ID_SW4_1])
+
+LINK_SW3_SW5_UUID           = get_link_uuid(ENDPOINT_ID_SW3_2, ENDPOINT_ID_SW5_1)
+LINK_SW3_SW5_ID             = json_link_id(LINK_SW3_SW5_UUID)
+LINK_SW3_SW5                = json_link(LINK_SW3_SW5_UUID, [ENDPOINT_ID_SW3_2, ENDPOINT_ID_SW5_1])
+
+LINK_SW4_SW6_UUID           = get_link_uuid(ENDPOINT_ID_SW4_2, ENDPOINT_ID_SW6_1)
+LINK_SW4_SW6_ID             = json_link_id(LINK_SW4_SW6_UUID)
+LINK_SW4_SW6                = json_link(LINK_SW4_SW6_UUID, [ENDPOINT_ID_SW4_2, ENDPOINT_ID_SW6_1])
+
+LINK_SW5_SW6_UUID           = get_link_uuid(ENDPOINT_ID_SW5_2, ENDPOINT_ID_SW6_2)
+LINK_SW5_SW6_ID             = json_link_id(LINK_SW5_SW6_UUID)
+LINK_SW5_SW6                = json_link(LINK_SW5_SW6_UUID, [ENDPOINT_ID_SW5_2, ENDPOINT_ID_SW6_2])
+
+# ----- Service ----------------------------------------------------------------------------------------------------------
+
+#SERVICE_SW1_UUID        = get_service_uuid(ENDPOINT_ID_SW1_1, ENDPOINT_ID_SW1_2)
+#SERVICE_SW1             = json_service_p4_planned(SERVICE_SW1_UUID)
+
+#SERVICE_SW2_UUID        = get_service_uuid(ENDPOINT_ID_SW2_1, ENDPOINT_ID_SW2_2)
+#SERVICE_SW2             = json_service_p4_planned(SERVICE_SW2_UUID)
+
+SERVICE_SW1_SW6_UUID            = get_service_uuid(ENDPOINT_ID_SW1_3, ENDPOINT_ID_SW6_3)
+SERVICE_SW1_SW6                 = json_service_p4_planned(SERVICE_SW1_SW6_UUID)
+SERVICE_SW1_SW6_ENDPOINT_IDS    = [DEVICE_SW1_ENDPOINT_IDS[2], DEVICE_SW6_ENDPOINT_IDS[2]]
+
+# ----- Object Collections ---------------------------------------------------------------------------------------------
+
+CONTEXTS = [CONTEXT]
+TOPOLOGIES = [TOPOLOGY]
+
+DEVICES = [
+    (DEVICE_SW1, DEVICE_SW1_CONNECT_RULES, DEVICE_SW1_ENDPOINTS),
+    (DEVICE_SW2, DEVICE_SW2_CONNECT_RULES, DEVICE_SW2_ENDPOINTS),
+    (DEVICE_SW3, DEVICE_SW3_CONNECT_RULES, DEVICE_SW3_ENDPOINTS),
+    (DEVICE_SW4, DEVICE_SW4_CONNECT_RULES, DEVICE_SW4_ENDPOINTS),
+    (DEVICE_SW5, DEVICE_SW5_CONNECT_RULES, DEVICE_SW5_ENDPOINTS),
+    (DEVICE_SW6, DEVICE_SW6_CONNECT_RULES, DEVICE_SW6_ENDPOINTS),
+]
+
+LINKS = [
+    LINK_SW1_SW2,
+    LINK_SW1_SW3,
+
+    LINK_SW2_SW4,
+    LINK_SW3_SW5,
+
+    LINK_SW4_SW6,
+    LINK_SW5_SW6
+    ] 
+
+#SERVICES = [(SERVICE_SW1, DEVICE_SW1_ENDPOINT_IDS), (SERVICE_SW2, DEVICE_SW2_ENDPOINT_IDS)]
+
+#SERVICE_SW1_SW2_ENDPOINT_IDS = DEVICE_SW1_ENDPOINT_IDS + DEVICE_SW2_ENDPOINT_IDS
+
+SERVICES = [(SERVICE_SW1_SW6, SERVICE_SW1_SW6_ENDPOINT_IDS)]
\ No newline at end of file
diff --git a/src/tests/scenario2/old_tests/run_test_01_bootstrap.sh b/src/tests/scenario2/old_tests/run_test_01_bootstrap.sh
new file mode 100755
index 0000000000000000000000000000000000000000..a7465a8ac3c6a6fea25e82225124b39e15643243
--- /dev/null
+++ b/src/tests/scenario2/old_tests/run_test_01_bootstrap.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# make sure to source the following scripts:
+# - my_deploy.sh
+
+source tfs_runtime_env_vars.sh
+pytest --verbose src/tests/scenario2/tests/test_functional_bootstrap.py
diff --git a/src/tests/scenario2/old_tests/run_test_02_create_service.sh b/src/tests/scenario2/old_tests/run_test_02_create_service.sh
new file mode 100755
index 0000000000000000000000000000000000000000..18e0d4ab8427034bc55edc2c152eaf7f10fc3d75
--- /dev/null
+++ b/src/tests/scenario2/old_tests/run_test_02_create_service.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+source tfs_runtime_env_vars.sh
+pytest --verbose src/tests/scenario2/tests/test_functional_create_service.py
diff --git a/src/tests/scenario2/old_tests/run_test_03_delete_service.sh b/src/tests/scenario2/old_tests/run_test_03_delete_service.sh
new file mode 100755
index 0000000000000000000000000000000000000000..c8ee69c3e6e1be4d6123c28b4f01437815b9c621
--- /dev/null
+++ b/src/tests/scenario2/old_tests/run_test_03_delete_service.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+source tfs_runtime_env_vars.sh
+pytest --verbose src/tests/scenario2/tests/test_functional_delete_service.py
diff --git a/src/tests/scenario2/old_tests/run_test_04_cleanup.sh b/src/tests/scenario2/old_tests/run_test_04_cleanup.sh
new file mode 100755
index 0000000000000000000000000000000000000000..b66605fde8cacb77f12900d25015c922e6bf34e9
--- /dev/null
+++ b/src/tests/scenario2/old_tests/run_test_04_cleanup.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+source tfs_runtime_env_vars.sh
+pytest --verbose src/tests/scenario2/tests/test_functional_cleanup.py
diff --git a/src/tests/scenario2/old_tests/run_tests_and_coverage.sh b/src/tests/scenario2/old_tests/run_tests_and_coverage.sh
new file mode 100755
index 0000000000000000000000000000000000000000..c25c4a92190468fb1c69850870eae29392336afd
--- /dev/null
+++ b/src/tests/scenario2/old_tests/run_tests_and_coverage.sh
@@ -0,0 +1,45 @@
+#!/bin/bash
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+
+PROJECTDIR=`pwd`
+
+cd $PROJECTDIR/src
+RCFILE=$PROJECTDIR/coverage/.coveragerc
+COVERAGEFILE=$PROJECTDIR/coverage/.coverage
+
+# Configure the correct folder on the .coveragerc file
+cat $PROJECTDIR/coverage/.coveragerc.template | sed s+~/teraflow/controller+$PROJECTDIR+g > $RCFILE
+
+# Destroy old coverage file
+rm -f $COVERAGEFILE
+
+# Force a flush of Context database
+kubectl --namespace $TFS_K8S_NAMESPACE exec -it deployment/contextservice --container redis -- redis-cli FLUSHALL
+
+source tfs_runtime_env_vars.sh
+
+# Run functional tests and analyze code coverage at the same time
+coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+    tests/ofc22/tests/test_functional_bootstrap.py
+
+coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+    tests/ofc22/tests/test_functional_create_service.py
+
+coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+    tests/ofc22/tests/test_functional_delete_service.py
+
+coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+    tests/ofc22/tests/test_functional_cleanup.py
diff --git a/src/tests/scenario2/old_tests/tests/.gitignore b/src/tests/scenario2/old_tests/tests/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..76cb708d1b532c9b69166e55f36bcb912fd5e370
--- /dev/null
+++ b/src/tests/scenario2/old_tests/tests/.gitignore
@@ -0,0 +1,2 @@
+# Add here your files containing confidential testbed details such as IP addresses, ports, usernames, passwords, etc.
+Credentials.py
diff --git a/src/tests/scenario2/old_tests/tests/BuildDescriptors.py b/src/tests/scenario2/old_tests/tests/BuildDescriptors.py
new file mode 100644
index 0000000000000000000000000000000000000000..98b78863318a7ad682fc5f970d44d02240b45a26
--- /dev/null
+++ b/src/tests/scenario2/old_tests/tests/BuildDescriptors.py
@@ -0,0 +1,35 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+import copy, json, sys
+from .Objects import CONTEXTS, DEVICES, LINKS, TOPOLOGIES
+
+def main():
+    with open('tests/ofc22/descriptors_emulated.json', 'w', encoding='UTF-8') as f:
+        devices = []
+        for device,connect_rules in DEVICES:
+            device = copy.deepcopy(device)
+            device['device_config']['config_rules'].extend(connect_rules)
+            devices.append(device)
+
+        f.write(json.dumps({
+            'contexts': CONTEXTS,
+            'topologies': TOPOLOGIES,
+            'devices': devices,
+            'links': LINKS
+        }))
+    return 0
+
+if __name__ == '__main__':
+    sys.exit(main())
diff --git a/src/tests/scenario2/old_tests/tests/Fixtures.py b/src/tests/scenario2/old_tests/tests/Fixtures.py
new file mode 100644
index 0000000000000000000000000000000000000000..225147fc0cd243060e07163df46403965d7a74ab
--- /dev/null
+++ b/src/tests/scenario2/old_tests/tests/Fixtures.py
@@ -0,0 +1,51 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+import pytest
+from common.Settings import get_setting
+from common.proto.monitoring_pb2 import AlarmDescriptor, AlarmSubscription
+from compute.tests.mock_osm.MockOSM import MockOSM
+from .Objects import WIM_MAPPING, WIM_PASSWORD, WIM_USERNAME
+
+
+@pytest.fixture(scope='session')
+def osm_wim():
+    wim_url = 'http://{:s}:{:s}'.format(
+        get_setting('COMPUTESERVICE_SERVICE_HOST'), str(get_setting('COMPUTESERVICE_SERVICE_PORT_HTTP')))
+    return MockOSM(wim_url, WIM_MAPPING, WIM_USERNAME, WIM_PASSWORD)
+
+@pytest.fixture(scope='session')
+def alarm_descriptor():
+
+    alarm_descriptor = AlarmDescriptor()
+
+    alarm_descriptor.alarm_description                      = "Default Alarm Description"
+    alarm_descriptor.name                                   = "Default Alarm Name"
+    alarm_descriptor.kpi_value_range.kpiMinValue.floatVal   = 0.0
+    alarm_descriptor.kpi_value_range.kpiMaxValue.floatVal   = 250.0
+    alarm_descriptor.kpi_value_range.inRange                = True
+    alarm_descriptor.kpi_value_range.includeMinValue        = False
+    alarm_descriptor.kpi_value_range.includeMaxValue        = True
+
+    return alarm_descriptor
+
+@pytest.fixture(scope='session')
+def alarm_subscription():
+
+    alarm_subscription = AlarmSubscription()
+
+    alarm_subscription.subscription_timeout_s      = 10
+    alarm_subscription.subscription_frequency_ms   = 2000
+
+    return alarm_subscription
\ No newline at end of file
diff --git a/src/tests/scenario2/old_tests/tests/LoadDescriptors.py b/src/tests/scenario2/old_tests/tests/LoadDescriptors.py
new file mode 100644
index 0000000000000000000000000000000000000000..b232935f4675d718d55e67fe3a76012a39398dda
--- /dev/null
+++ b/src/tests/scenario2/old_tests/tests/LoadDescriptors.py
@@ -0,0 +1,40 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+import json, logging, sys
+from common.Settings import get_setting
+from context.client.ContextClient import ContextClient
+from common.proto.context_pb2 import Context, Device, Link, Topology
+from device.client.DeviceClient import DeviceClient
+
+LOGGER = logging.getLogger(__name__)
+LOGGER.setLevel(logging.DEBUG)
+
+def main():
+    context_client = ContextClient(
+        get_setting('CONTEXTSERVICE_SERVICE_HOST'), get_setting('CONTEXTSERVICE_SERVICE_PORT_GRPC'))
+    device_client  = DeviceClient(
+        get_setting('DEVICESERVICE_SERVICE_HOST'), get_setting('DEVICESERVICE_SERVICE_PORT_GRPC'))
+
+    with open('tests/ofc22/descriptors.json', 'r', encoding='UTF-8') as f:
+        descriptors = json.loads(f.read())
+
+    for context  in descriptors['contexts'  ]: context_client.SetContext (Context (**context ))
+    for topology in descriptors['topologies']: context_client.SetTopology(Topology(**topology))
+    for device   in descriptors['devices'   ]: device_client .AddDevice  (Device  (**device  ))
+    for link     in descriptors['links'     ]: context_client.SetLink    (Link    (**link    ))
+    return 0
+
+if __name__ == '__main__':
+    sys.exit(main())
diff --git a/src/tests/scenario2/old_tests/tests/Objects.py b/src/tests/scenario2/old_tests/tests/Objects.py
new file mode 100644
index 0000000000000000000000000000000000000000..7eea0f4c3262793e9ba00ae80c66cc5b1ed0b8dc
--- /dev/null
+++ b/src/tests/scenario2/old_tests/tests/Objects.py
@@ -0,0 +1,231 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from typing import Dict, List, Tuple
+from common.Constants import DEFAULT_CONTEXT_UUID, DEFAULT_TOPOLOGY_UUID
+from common.tools.object_factory.Context import json_context, json_context_id
+from common.tools.object_factory.Device import (
+    json_device_connect_rules, json_device_emulated_connect_rules, json_device_emulated_packet_router_disabled,
+    json_device_emulated_tapi_disabled, json_device_id, json_device_packetrouter_disabled, json_device_tapi_disabled)
+from common.tools.object_factory.EndPoint import json_endpoint, json_endpoint_id
+from common.tools.object_factory.Link import json_link, json_link_id
+from common.tools.object_factory.Topology import json_topology, json_topology_id
+from common.proto.kpi_sample_types_pb2 import KpiSampleType
+
+# ----- Context --------------------------------------------------------------------------------------------------------
+CONTEXT_ID = json_context_id(DEFAULT_CONTEXT_UUID)
+CONTEXT    = json_context(DEFAULT_CONTEXT_UUID)
+
+# ----- Topology -------------------------------------------------------------------------------------------------------
+TOPOLOGY_ID = json_topology_id(DEFAULT_TOPOLOGY_UUID, context_id=CONTEXT_ID)
+TOPOLOGY    = json_topology(DEFAULT_TOPOLOGY_UUID, context_id=CONTEXT_ID)
+
+# ----- Monitoring Samples ---------------------------------------------------------------------------------------------
+PACKET_PORT_SAMPLE_TYPES = [
+    KpiSampleType.KPISAMPLETYPE_PACKETS_TRANSMITTED,
+    KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED,
+    KpiSampleType.KPISAMPLETYPE_BYTES_TRANSMITTED,
+    KpiSampleType.KPISAMPLETYPE_BYTES_RECEIVED,
+]
+
+# ----- Device Credentials and Settings --------------------------------------------------------------------------------
+try:
+    from .Credentials import DEVICE_R1_ADDRESS, DEVICE_R1_PORT, DEVICE_R1_USERNAME, DEVICE_R1_PASSWORD
+    from .Credentials import DEVICE_R3_ADDRESS, DEVICE_R3_PORT, DEVICE_R3_USERNAME, DEVICE_R3_PASSWORD
+    from .Credentials import DEVICE_O1_ADDRESS, DEVICE_O1_PORT
+    USE_REAL_DEVICES = True     # Use real devices
+except ImportError:
+    USE_REAL_DEVICES = False    # Use emulated devices
+
+    DEVICE_R1_ADDRESS  = '0.0.0.0'
+    DEVICE_R1_PORT     = 830
+    DEVICE_R1_USERNAME = 'admin'
+    DEVICE_R1_PASSWORD = 'admin'
+
+    DEVICE_R3_ADDRESS  = '0.0.0.0'
+    DEVICE_R3_PORT     = 830
+    DEVICE_R3_USERNAME = 'admin'
+    DEVICE_R3_PASSWORD = 'admin'
+
+    DEVICE_O1_ADDRESS  = '0.0.0.0'
+    DEVICE_O1_PORT     = 4900
+
+#USE_REAL_DEVICES = False     # Uncomment to force to use emulated devices
+
+def json_endpoint_ids(device_id : Dict, endpoint_descriptors : List[Tuple[str, str, List[int]]]):
+    return [
+        json_endpoint_id(device_id, ep_uuid, topology_id=None)
+        for ep_uuid, _, _ in endpoint_descriptors
+    ]
+
+def json_endpoints(device_id : Dict, endpoint_descriptors : List[Tuple[str, str, List[int]]]):
+    return [
+        json_endpoint(device_id, ep_uuid, ep_type, topology_id=None, kpi_sample_types=ep_sample_types)
+        for ep_uuid, ep_type, ep_sample_types in endpoint_descriptors
+    ]
+
+def get_link_uuid(a_device_id : Dict, a_endpoint_id : Dict, z_device_id : Dict, z_endpoint_id : Dict) -> str:
+    return '{:s}/{:s}=={:s}/{:s}'.format(
+        a_device_id['device_uuid']['uuid'], a_endpoint_id['endpoint_uuid']['uuid'],
+        z_device_id['device_uuid']['uuid'], z_endpoint_id['endpoint_uuid']['uuid'])
+
+
+# ----- Devices --------------------------------------------------------------------------------------------------------
+if not USE_REAL_DEVICES:
+    json_device_packetrouter_disabled = json_device_emulated_packet_router_disabled
+    json_device_tapi_disabled         = json_device_emulated_tapi_disabled
+
+DEVICE_R1_UUID          = 'R1-EMU'
+DEVICE_R1_TIMEOUT       = 120
+DEVICE_R1_ENDPOINT_DEFS = [('13/0/0', 'optical', []), ('13/1/2', 'copper', PACKET_PORT_SAMPLE_TYPES)]
+DEVICE_R1_ID            = json_device_id(DEVICE_R1_UUID)
+#DEVICE_R1_ENDPOINTS     = json_endpoints(DEVICE_R1_ID, DEVICE_R1_ENDPOINT_DEFS)
+DEVICE_R1_ENDPOINT_IDS  = json_endpoint_ids(DEVICE_R1_ID, DEVICE_R1_ENDPOINT_DEFS)
+DEVICE_R1               = json_device_packetrouter_disabled(DEVICE_R1_UUID)
+ENDPOINT_ID_R1_13_0_0   = DEVICE_R1_ENDPOINT_IDS[0]
+ENDPOINT_ID_R1_13_1_2   = DEVICE_R1_ENDPOINT_IDS[1]
+DEVICE_R1_CONNECT_RULES = json_device_connect_rules(DEVICE_R1_ADDRESS, DEVICE_R1_PORT, {
+    'username': DEVICE_R1_USERNAME,
+    'password': DEVICE_R1_PASSWORD,
+    'timeout' : DEVICE_R1_TIMEOUT,
+}) if USE_REAL_DEVICES else json_device_emulated_connect_rules(DEVICE_R1_ENDPOINT_DEFS)
+
+
+DEVICE_R2_UUID          = 'R2-EMU'
+DEVICE_R2_ENDPOINT_DEFS = [('13/0/0', 'optical', []), ('13/1/2', 'copper', PACKET_PORT_SAMPLE_TYPES)]
+DEVICE_R2_ID            = json_device_id(DEVICE_R2_UUID)
+#DEVICE_R2_ENDPOINTS     = json_endpoints(DEVICE_R2_ID, DEVICE_R2_ENDPOINT_DEFS)
+DEVICE_R2_ENDPOINT_IDS  = json_endpoint_ids(DEVICE_R2_ID, DEVICE_R2_ENDPOINT_DEFS)
+DEVICE_R2               = json_device_emulated_packet_router_disabled(DEVICE_R2_UUID)
+ENDPOINT_ID_R2_13_0_0   = DEVICE_R2_ENDPOINT_IDS[0]
+ENDPOINT_ID_R2_13_1_2   = DEVICE_R2_ENDPOINT_IDS[1]
+DEVICE_R2_CONNECT_RULES = json_device_emulated_connect_rules(DEVICE_R2_ENDPOINT_DEFS)
+
+
+DEVICE_R3_UUID          = 'R3-EMU'
+DEVICE_R3_TIMEOUT       = 120
+DEVICE_R3_ENDPOINT_DEFS = [('13/0/0', 'optical', []), ('13/1/2', 'copper', PACKET_PORT_SAMPLE_TYPES)]
+DEVICE_R3_ID            = json_device_id(DEVICE_R3_UUID)
+#DEVICE_R3_ENDPOINTS     = json_endpoints(DEVICE_R3_ID, DEVICE_R3_ENDPOINT_DEFS)
+DEVICE_R3_ENDPOINT_IDS  = json_endpoint_ids(DEVICE_R3_ID, DEVICE_R3_ENDPOINT_DEFS)
+DEVICE_R3               = json_device_packetrouter_disabled(DEVICE_R3_UUID)
+ENDPOINT_ID_R3_13_0_0   = DEVICE_R3_ENDPOINT_IDS[0]
+ENDPOINT_ID_R3_13_1_2   = DEVICE_R3_ENDPOINT_IDS[1]
+DEVICE_R3_CONNECT_RULES = json_device_connect_rules(DEVICE_R3_ADDRESS, DEVICE_R3_PORT, {
+    'username': DEVICE_R3_USERNAME,
+    'password': DEVICE_R3_PASSWORD,
+    'timeout' : DEVICE_R3_TIMEOUT,
+}) if USE_REAL_DEVICES else json_device_emulated_connect_rules(DEVICE_R3_ENDPOINT_DEFS)
+
+
+DEVICE_R4_UUID          = 'R4-EMU'
+DEVICE_R4_ENDPOINT_DEFS = [('13/0/0', 'optical', []), ('13/1/2', 'copper', PACKET_PORT_SAMPLE_TYPES)]
+DEVICE_R4_ID            = json_device_id(DEVICE_R4_UUID)
+#DEVICE_R4_ENDPOINTS     = json_endpoints(DEVICE_R4_ID, DEVICE_R4_ENDPOINT_DEFS)
+DEVICE_R4_ENDPOINT_IDS  = json_endpoint_ids(DEVICE_R4_ID, DEVICE_R4_ENDPOINT_DEFS)
+DEVICE_R4               = json_device_emulated_packet_router_disabled(DEVICE_R4_UUID)
+ENDPOINT_ID_R4_13_0_0   = DEVICE_R4_ENDPOINT_IDS[0]
+ENDPOINT_ID_R4_13_1_2   = DEVICE_R4_ENDPOINT_IDS[1]
+DEVICE_R4_CONNECT_RULES = json_device_emulated_connect_rules(DEVICE_R4_ENDPOINT_DEFS)
+
+
+DEVICE_O1_UUID          = 'O1-OLS'
+DEVICE_O1_TIMEOUT       = 120
+DEVICE_O1_ENDPOINT_DEFS = [
+    ('aade6001-f00b-5e2f-a357-6a0a9d3de870', 'optical', []), # node_1_port_13
+    ('eb287d83-f05e-53ec-ab5a-adf6bd2b5418', 'optical', []), # node_2_port_13
+    ('0ef74f99-1acc-57bd-ab9d-4b958b06c513', 'optical', []), # node_3_port_13
+    ('50296d99-58cc-5ce7-82f5-fc8ee4eec2ec', 'optical', []), # node_4_port_13
+]
+DEVICE_O1_ID            = json_device_id(DEVICE_O1_UUID)
+DEVICE_O1               = json_device_tapi_disabled(DEVICE_O1_UUID)
+#DEVICE_O1_ENDPOINTS     = json_endpoints(DEVICE_O1_ID, DEVICE_O1_ENDPOINT_DEFS)
+DEVICE_O1_ENDPOINT_IDS  = json_endpoint_ids(DEVICE_O1_ID, DEVICE_O1_ENDPOINT_DEFS)
+ENDPOINT_ID_O1_EP1      = DEVICE_O1_ENDPOINT_IDS[0]
+ENDPOINT_ID_O1_EP2      = DEVICE_O1_ENDPOINT_IDS[1]
+ENDPOINT_ID_O1_EP3      = DEVICE_O1_ENDPOINT_IDS[2]
+ENDPOINT_ID_O1_EP4      = DEVICE_O1_ENDPOINT_IDS[3]
+DEVICE_O1_CONNECT_RULES = json_device_connect_rules(DEVICE_O1_ADDRESS, DEVICE_O1_PORT, {
+    'timeout' : DEVICE_O1_TIMEOUT,
+}) if USE_REAL_DEVICES else json_device_emulated_connect_rules(DEVICE_O1_ENDPOINT_DEFS)
+
+
+# ----- Links ----------------------------------------------------------------------------------------------------------
+LINK_R1_O1_UUID = get_link_uuid(DEVICE_R1_ID, ENDPOINT_ID_R1_13_0_0, DEVICE_O1_ID, ENDPOINT_ID_O1_EP1)
+LINK_R1_O1_ID   = json_link_id(LINK_R1_O1_UUID)
+LINK_R1_O1      = json_link(LINK_R1_O1_UUID, [ENDPOINT_ID_R1_13_0_0, ENDPOINT_ID_O1_EP1])
+
+LINK_R2_O1_UUID = get_link_uuid(DEVICE_R2_ID, ENDPOINT_ID_R2_13_0_0, DEVICE_O1_ID, ENDPOINT_ID_O1_EP2)
+LINK_R2_O1_ID   = json_link_id(LINK_R2_O1_UUID)
+LINK_R2_O1      = json_link(LINK_R2_O1_UUID, [ENDPOINT_ID_R2_13_0_0, ENDPOINT_ID_O1_EP2])
+
+LINK_R3_O1_UUID = get_link_uuid(DEVICE_R3_ID, ENDPOINT_ID_R3_13_0_0, DEVICE_O1_ID, ENDPOINT_ID_O1_EP3)
+LINK_R3_O1_ID   = json_link_id(LINK_R3_O1_UUID)
+LINK_R3_O1      = json_link(LINK_R3_O1_UUID, [ENDPOINT_ID_R3_13_0_0, ENDPOINT_ID_O1_EP3])
+
+LINK_R4_O1_UUID = get_link_uuid(DEVICE_R4_ID, ENDPOINT_ID_R4_13_0_0, DEVICE_O1_ID, ENDPOINT_ID_O1_EP4)
+LINK_R4_O1_ID   = json_link_id(LINK_R4_O1_UUID)
+LINK_R4_O1      = json_link(LINK_R4_O1_UUID, [ENDPOINT_ID_R4_13_0_0, ENDPOINT_ID_O1_EP4])
+
+
+# ----- WIM Service Settings -------------------------------------------------------------------------------------------
+
+def compose_service_endpoint_id(endpoint_id):
+    device_uuid = endpoint_id['device_id']['device_uuid']['uuid']
+    endpoint_uuid = endpoint_id['endpoint_uuid']['uuid']
+    return ':'.join([device_uuid, endpoint_uuid])
+
+WIM_SEP_R1_ID      = compose_service_endpoint_id(ENDPOINT_ID_R1_13_1_2)
+WIM_SEP_R1_SITE_ID = '1'
+WIM_SEP_R1_BEARER  = WIM_SEP_R1_ID
+WIM_SRV_R1_VLAN_ID = 400
+
+WIM_SEP_R3_ID      = compose_service_endpoint_id(ENDPOINT_ID_R3_13_1_2)
+WIM_SEP_R3_SITE_ID = '2'
+WIM_SEP_R3_BEARER  = WIM_SEP_R3_ID
+WIM_SRV_R3_VLAN_ID = 500
+
+WIM_USERNAME = 'admin'
+WIM_PASSWORD = 'admin'
+
+WIM_MAPPING  = [
+    {'device-id': DEVICE_R1_UUID, 'service_endpoint_id': WIM_SEP_R1_ID,
+     'service_mapping_info': {'bearer': {'bearer-reference': WIM_SEP_R1_BEARER}, 'site-id': WIM_SEP_R1_SITE_ID}},
+    {'device-id': DEVICE_R3_UUID, 'service_endpoint_id': WIM_SEP_R3_ID,
+     'service_mapping_info': {'bearer': {'bearer-reference': WIM_SEP_R3_BEARER}, 'site-id': WIM_SEP_R3_SITE_ID}},
+]
+WIM_SERVICE_TYPE = 'ELINE'
+WIM_SERVICE_CONNECTION_POINTS = [
+    {'service_endpoint_id': WIM_SEP_R1_ID,
+        'service_endpoint_encapsulation_type': 'dot1q',
+        'service_endpoint_encapsulation_info': {'vlan': WIM_SRV_R1_VLAN_ID}},
+    {'service_endpoint_id': WIM_SEP_R3_ID,
+        'service_endpoint_encapsulation_type': 'dot1q',
+        'service_endpoint_encapsulation_info': {'vlan': WIM_SRV_R3_VLAN_ID}},
+]
+
+# ----- Object Collections ---------------------------------------------------------------------------------------------
+
+CONTEXTS = [CONTEXT]
+TOPOLOGIES = [TOPOLOGY]
+
+DEVICES = [
+    (DEVICE_R1, DEVICE_R1_CONNECT_RULES),
+    (DEVICE_R2, DEVICE_R2_CONNECT_RULES),
+    (DEVICE_R3, DEVICE_R3_CONNECT_RULES),
+    (DEVICE_R4, DEVICE_R4_CONNECT_RULES),
+    (DEVICE_O1, DEVICE_O1_CONNECT_RULES),
+]
+
+LINKS = [LINK_R1_O1, LINK_R2_O1, LINK_R3_O1, LINK_R4_O1]
\ No newline at end of file
diff --git a/src/tests/scenario2/old_tests/tests/__init__.py b/src/tests/scenario2/old_tests/tests/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..1549d9811aa5d1c193a44ad45d0d7773236c0612
--- /dev/null
+++ b/src/tests/scenario2/old_tests/tests/__init__.py
@@ -0,0 +1,14 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
diff --git a/src/tests/scenario2/old_tests/tests/test_functional_bootstrap.py b/src/tests/scenario2/old_tests/tests/test_functional_bootstrap.py
new file mode 100644
index 0000000000000000000000000000000000000000..cfe21603de85862e83d7dd8b9fb4eebefd99b702
--- /dev/null
+++ b/src/tests/scenario2/old_tests/tests/test_functional_bootstrap.py
@@ -0,0 +1,219 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+import copy, logging, pytest
+from common.Settings import get_setting
+from common.proto.monitoring_pb2 import KpiDescriptorList
+from common.tests.EventTools import EVENT_CREATE, EVENT_UPDATE, check_events
+from common.tools.object_factory.Context import json_context_id
+from common.tools.object_factory.Device import json_device_id
+from common.tools.object_factory.Link import json_link_id
+from common.tools.object_factory.Topology import json_topology_id
+from context.client.ContextClient import ContextClient
+from monitoring.client.MonitoringClient import MonitoringClient
+from context.client.EventsCollector import EventsCollector
+from common.proto.context_pb2 import Context, ContextId, Device, Empty, Link, Topology
+from common.proto.monitoring_pb2 import AlarmDescriptor, AlarmList
+from device.client.DeviceClient import DeviceClient
+from .Objects import CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES
+from tests.Fixtures import context_client, device_client, monitoring_client
+from .Fixtures import alarm_descriptor
+
+LOGGER = logging.getLogger(__name__)
+LOGGER.setLevel(logging.DEBUG)
+
+
+def test_scenario_empty(context_client : ContextClient):  # pylint: disable=redefined-outer-name
+    # ----- List entities - Ensure database is empty -------------------------------------------------------------------
+    response = context_client.ListContexts(Empty())
+    assert len(response.contexts) == 0
+
+    response = context_client.ListDevices(Empty())
+    assert len(response.devices) == 0
+
+    response = context_client.ListLinks(Empty())
+    assert len(response.links) == 0
+
+
+def test_prepare_scenario(context_client : ContextClient):  # pylint: disable=redefined-outer-name
+
+    # ----- Start the EventsCollector ----------------------------------------------------------------------------------
+    #events_collector = EventsCollector(context_client)
+    #events_collector.start()
+
+    #expected_events = []
+
+    # ----- Create Contexts and Topologies -----------------------------------------------------------------------------
+    for context in CONTEXTS:
+        context_uuid = context['context_id']['context_uuid']['uuid']
+        LOGGER.info('Adding Context {:s}'.format(context_uuid))
+        response = context_client.SetContext(Context(**context))
+        assert response.context_uuid.uuid == context_uuid
+        #expected_events.append(('ContextEvent', EVENT_CREATE, json_context_id(context_uuid)))
+
+    for topology in TOPOLOGIES:
+        context_uuid = topology['topology_id']['context_id']['context_uuid']['uuid']
+        topology_uuid = topology['topology_id']['topology_uuid']['uuid']
+        LOGGER.info('Adding Topology {:s}/{:s}'.format(context_uuid, topology_uuid))
+        response = context_client.SetTopology(Topology(**topology))
+        assert response.context_id.context_uuid.uuid == context_uuid
+        assert response.topology_uuid.uuid == topology_uuid
+        context_id = json_context_id(context_uuid)
+        #expected_events.append(('TopologyEvent', EVENT_CREATE, json_topology_id(topology_uuid, context_id=context_id)))
+
+    # ----- Validate Collected Events ----------------------------------------------------------------------------------
+    #check_events(events_collector, expected_events)
+
+    # ----- Stop the EventsCollector -----------------------------------------------------------------------------------
+    #events_collector.stop()
+
+
+def test_scenario_ready(context_client : ContextClient):  # pylint: disable=redefined-outer-name
+    # ----- List entities - Ensure scenario is ready -------------------------------------------------------------------
+    response = context_client.ListContexts(Empty())
+    assert len(response.contexts) == len(CONTEXTS)
+
+    response = context_client.ListTopologies(ContextId(**CONTEXT_ID))
+    assert len(response.topologies) == len(TOPOLOGIES)
+
+    response = context_client.ListDevices(Empty())
+    assert len(response.devices) == 0
+
+    response = context_client.ListLinks(Empty())
+    assert len(response.links) == 0
+
+    response = context_client.ListServices(ContextId(**CONTEXT_ID))
+    assert len(response.services) == 0
+
+
+def test_devices_bootstraping(
+    context_client : ContextClient, device_client : DeviceClient):  # pylint: disable=redefined-outer-name
+
+    # ----- Start the EventsCollector ----------------------------------------------------------------------------------
+    #events_collector = EventsCollector(context_client, log_events_received=True)
+    #events_collector.start()
+
+    #expected_events = []
+
+    # ----- Create Devices and Validate Collected Events ---------------------------------------------------------------
+    for device, connect_rules in DEVICES:
+        device_uuid = device['device_id']['device_uuid']['uuid']
+        LOGGER.info('Adding Device {:s}'.format(device_uuid))
+
+        device_with_connect_rules = copy.deepcopy(device)
+        device_with_connect_rules['device_config']['config_rules'].extend(connect_rules)
+        response = device_client.AddDevice(Device(**device_with_connect_rules))
+        assert response.device_uuid.uuid == device_uuid
+
+        #expected_events.extend([
+        #    # Device creation, update for automation to start the device
+        #    ('DeviceEvent', EVENT_CREATE, json_device_id(device_uuid)),
+        #    #('DeviceEvent', EVENT_UPDATE, json_device_id(device_uuid)),
+        #])
+
+        #response = context_client.GetDevice(response)
+        #for endpoint in response.device_endpoints:
+        #    for _ in endpoint.kpi_sample_types:
+        #        # Monitoring configures monitoring for endpoint
+        #        expected_events.append(('DeviceEvent', EVENT_UPDATE, json_device_id(device_uuid)))
+
+    # ----- Validate Collected Events ----------------------------------------------------------------------------------
+    #check_events(events_collector, expected_events)
+
+    # ----- Stop the EventsCollector -----------------------------------------------------------------------------------
+    #events_collector.stop()
+
+
+def test_devices_bootstrapped(context_client : ContextClient):  # pylint: disable=redefined-outer-name
+    # ----- List entities - Ensure bevices are created -----------------------------------------------------------------
+    response = context_client.ListContexts(Empty())
+    assert len(response.contexts) == len(CONTEXTS)
+
+    response = context_client.ListTopologies(ContextId(**CONTEXT_ID))
+    assert len(response.topologies) == len(TOPOLOGIES)
+
+    response = context_client.ListDevices(Empty())
+    assert len(response.devices) == len(DEVICES)
+
+    response = context_client.ListLinks(Empty())
+    assert len(response.links) == 0
+
+    response = context_client.ListServices(ContextId(**CONTEXT_ID))
+    assert len(response.services) == 0
+
+
+def test_links_creation(context_client : ContextClient):  # pylint: disable=redefined-outer-name
+
+    # ----- Start the EventsCollector ----------------------------------------------------------------------------------
+    #events_collector = EventsCollector(context_client)
+    #events_collector.start()
+
+    #expected_events = []
+
+    # ----- Create Links and Validate Collected Events -----------------------------------------------------------------
+    for link in LINKS:
+        link_uuid = link['link_id']['link_uuid']['uuid']
+        LOGGER.info('Adding Link {:s}'.format(link_uuid))
+        response = context_client.SetLink(Link(**link))
+        assert response.link_uuid.uuid == link_uuid
+        #expected_events.append(('LinkEvent', EVENT_CREATE, json_link_id(link_uuid)))
+
+    # ----- Validate Collected Events ----------------------------------------------------------------------------------
+    #check_events(events_collector, expected_events)
+
+    # ----- Stop the EventsCollector -----------------------------------------------------------------------------------
+    #events_collector.stop()
+
+
+def test_links_created(context_client : ContextClient):  # pylint: disable=redefined-outer-name
+    # ----- List entities - Ensure links are created -------------------------------------------------------------------
+    response = context_client.ListContexts(Empty())
+    assert len(response.contexts) == len(CONTEXTS)
+
+    response = context_client.ListTopologies(ContextId(**CONTEXT_ID))
+    assert len(response.topologies) == len(TOPOLOGIES)
+
+    response = context_client.ListDevices(Empty())
+    assert len(response.devices) == len(DEVICES)
+
+    response = context_client.ListLinks(Empty())
+    assert len(response.links) == len(LINKS)
+
+    response = context_client.ListServices(ContextId(**CONTEXT_ID))
+    assert len(response.services) == 0
+
+
+def test_scenario_kpis_created(monitoring_client: MonitoringClient):
+    """
+    This test validates that KPIs related to the service/device/endpoint were created
+    during the service creation process.
+    """
+    response: KpiDescriptorList = monitoring_client.GetKpiDescriptorList(Empty())
+    LOGGER.info("Number of KPIs created: {}".format(len(response.kpi_descriptor_list)))
+    # TODO: replace the magic number `16` below for a formula that adapts to the number
+    # of links and devices
+    assert len(response.kpi_descriptor_list) == 16
+
+
+def test_scenario_alarms_created(monitoring_client: MonitoringClient, alarm_descriptor : AlarmDescriptor):
+    # ----- Create one alarm per Kpi created ----------------------------------------------------------------------------
+    response: KpiDescriptorList = monitoring_client.GetKpiDescriptorList(Empty())
+
+    for kpi_descriptor in response.kpi_descriptor_list:
+        new_alarm_descriptor                    = alarm_descriptor
+        new_alarm_descriptor.kpi_id.kpi_id.uuid = kpi_descriptor.kpi_id.kpi_id.uuid
+        monitoring_client.SetKpiAlarm(new_alarm_descriptor)
+
+    response: AlarmList = monitoring_client.GetAlarms(Empty())
+    assert len(response.alarm_descriptor) == 16
\ No newline at end of file
diff --git a/src/tests/scenario2/old_tests/tests/test_functional_cleanup.py b/src/tests/scenario2/old_tests/tests/test_functional_cleanup.py
new file mode 100644
index 0000000000000000000000000000000000000000..3a9843af69db4c0369b88c87985a0293b6aae605
--- /dev/null
+++ b/src/tests/scenario2/old_tests/tests/test_functional_cleanup.py
@@ -0,0 +1,133 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+import logging, pytest
+from common.Settings import get_setting
+from common.tests.EventTools import EVENT_REMOVE, check_events
+from common.tools.object_factory.Context import json_context_id
+from common.tools.object_factory.Device import json_device_id
+from common.tools.object_factory.Link import json_link_id
+from common.tools.object_factory.Topology import json_topology_id
+from context.client.ContextClient import ContextClient
+from context.client.EventsCollector import EventsCollector
+from common.proto.context_pb2 import ContextId, DeviceId, Empty, LinkId, TopologyId
+from common.proto.monitoring_pb2 import KpiId, KpiDescriptorList, AlarmList, AlarmID
+from device.client.DeviceClient import DeviceClient
+from monitoring.client.MonitoringClient import MonitoringClient
+from tests.Fixtures import context_client, device_client, monitoring_client
+from .Objects import CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES
+
+LOGGER = logging.getLogger(__name__)
+LOGGER.setLevel(logging.DEBUG)
+
+
+def test_services_removed(context_client : ContextClient):  # pylint: disable=redefined-outer-name
+    # ----- List entities - Ensure service is removed ------------------------------------------------------------------
+    response = context_client.ListContexts(Empty())
+    assert len(response.contexts) == len(CONTEXTS)
+
+    response = context_client.ListTopologies(ContextId(**CONTEXT_ID))
+    assert len(response.topologies) == len(TOPOLOGIES)
+
+    response = context_client.ListDevices(Empty())
+    assert len(response.devices) == len(DEVICES)
+
+    response = context_client.ListLinks(Empty())
+    assert len(response.links) == len(LINKS)
+
+    response = context_client.ListServices(ContextId(**CONTEXT_ID))
+    assert len(response.services) == 0
+
+
+def test_scenario_cleanup(
+    context_client : ContextClient, device_client : DeviceClient, monitoring_client : MonitoringClient):  # pylint: disable=redefined-outer-name
+
+    # ----- Start the EventsCollector ----------------------------------------------------------------------------------
+    #events_collector = EventsCollector(context_client)
+    #events_collector.start()
+
+    #expected_events = []
+
+    # ----- Delete Links and Validate Collected Events -----------------------------------------------------------------
+    for link in LINKS:
+        link_id = link['link_id']
+        link_uuid = link_id['link_uuid']['uuid']
+        LOGGER.info('Deleting Link {:s}'.format(link_uuid))
+        context_client.RemoveLink(LinkId(**link_id))
+        #expected_events.append(('LinkEvent', EVENT_REMOVE, json_link_id(link_uuid)))
+
+    # ----- Delete Devices and Validate Collected Events ---------------------------------------------------------------
+    for device, _ in DEVICES:
+        device_id = device['device_id']
+        device_uuid = device_id['device_uuid']['uuid']
+        LOGGER.info('Deleting Device {:s}'.format(device_uuid))
+        device_client.DeleteDevice(DeviceId(**device_id))
+        #expected_events.append(('DeviceEvent', EVENT_REMOVE, json_device_id(device_uuid)))
+
+    # ----- Delete Topologies and Validate Collected Events ------------------------------------------------------------
+    for topology in TOPOLOGIES:
+        topology_id = topology['topology_id']
+        context_uuid = topology_id['context_id']['context_uuid']['uuid']
+        topology_uuid = topology_id['topology_uuid']['uuid']
+        LOGGER.info('Deleting Topology {:s}/{:s}'.format(context_uuid, topology_uuid))
+        context_client.RemoveTopology(TopologyId(**topology_id))
+        context_id = json_context_id(context_uuid)
+        #expected_events.append(('TopologyEvent', EVENT_REMOVE, json_topology_id(topology_uuid, context_id=context_id)))
+
+    # ----- Delete Contexts and Validate Collected Events --------------------------------------------------------------
+    for context in CONTEXTS:
+        context_id = context['context_id']
+        context_uuid = context_id['context_uuid']['uuid']
+        LOGGER.info('Deleting Context {:s}'.format(context_uuid))
+        context_client.RemoveContext(ContextId(**context_id))
+        #expected_events.append(('ContextEvent', EVENT_REMOVE, json_context_id(context_uuid)))
+
+    # ----- Delete Alarms ----------------------------------------------------------------------------------------------
+    response: AlarmList = monitoring_client.GetAlarms(Empty())
+    for alarm in response.alarm_descriptor:
+        alarm_id = AlarmID()
+        alarm_id.alarm_id.uuid = alarm.alarm_id.alarm_id.uuid
+        monitoring_client.DeleteAlarm(alarm_id)
+
+    # ----- Delete Kpis ------------------------------------------------------------------------------------------------
+    response: KpiDescriptorList = monitoring_client.GetKpiDescriptorList(Empty())
+    for kpi_descriptor in response.kpi_descriptor_list:
+        kpi_id = KpiId()
+        kpi_id.kpi_id.uuid = kpi_descriptor.kpi_id.kpi_id.uuid
+        monitoring_client.DeleteKpi(kpi_id)
+
+
+    # ----- Validate Collected Events ----------------------------------------------------------------------------------
+    #check_events(events_collector, expected_events)
+
+    # ----- Stop the EventsCollector -----------------------------------------------------------------------------------
+    #events_collector.stop()
+
+
+def test_scenario_empty_again(context_client : ContextClient, monitoring_client : MonitoringClient):  # pylint: disable=redefined-outer-name
+    # ----- List entities - Ensure database is empty again -------------------------------------------------------------
+    response = context_client.ListContexts(Empty())
+    assert len(response.contexts) == 0
+
+    response = context_client.ListDevices(Empty())
+    assert len(response.devices) == 0
+
+    response = context_client.ListLinks(Empty())
+    assert len(response.links) == 0
+
+    response = monitoring_client.GetAlarms(Empty())
+    assert len(response.alarm_descriptor) == 0
+
+    response = monitoring_client.GetKpiDescriptorList(Empty())
+    assert len(response.kpi_descriptor_list) == 0
diff --git a/src/tests/scenario2/old_tests/tests/test_functional_create_service.py b/src/tests/scenario2/old_tests/tests/test_functional_create_service.py
new file mode 100644
index 0000000000000000000000000000000000000000..bc91b70d99313101211e3f49074a26d37067f8c0
--- /dev/null
+++ b/src/tests/scenario2/old_tests/tests/test_functional_create_service.py
@@ -0,0 +1,151 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+import logging, pytest, random, time
+from grpc._channel import _MultiThreadedRendezvous
+from common.DeviceTypes import DeviceTypeEnum
+from common.Settings import get_setting
+from common.tests.EventTools import EVENT_CREATE, EVENT_UPDATE, check_events
+from common.tools.object_factory.Connection import json_connection_id
+from common.tools.object_factory.Device import json_device_id
+from common.tools.object_factory.Service import json_service_id
+from common.tools.grpc.Tools import grpc_message_to_json_string
+from compute.tests.mock_osm.MockOSM import MockOSM
+from context.client.ContextClient import ContextClient
+from monitoring.client.MonitoringClient import MonitoringClient
+from context.client.EventsCollector import EventsCollector
+from common.proto.context_pb2 import ContextId, Empty
+from common.proto.monitoring_pb2 import AlarmList, AlarmSubscription
+from tests.Fixtures import context_client, monitoring_client
+from .Fixtures import osm_wim, alarm_subscription
+from .Objects import (
+    CONTEXT_ID, CONTEXTS, DEVICE_O1_UUID, DEVICE_R1_UUID, DEVICE_R3_UUID, DEVICES, LINKS, TOPOLOGIES,
+    WIM_SERVICE_CONNECTION_POINTS, WIM_SERVICE_TYPE)
+
+LOGGER = logging.getLogger(__name__)
+LOGGER.setLevel(logging.DEBUG)
+
+DEVTYPE_EMU_PR  = DeviceTypeEnum.EMULATED_PACKET_ROUTER.value
+DEVTYPE_EMU_OLS = DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM.value
+
+
+def test_scenario_is_correct(context_client : ContextClient):  # pylint: disable=redefined-outer-name
+    # ----- List entities - Ensure links are created -------------------------------------------------------------------
+    response = context_client.ListContexts(Empty())
+    assert len(response.contexts) == len(CONTEXTS)
+
+    response = context_client.ListTopologies(ContextId(**CONTEXT_ID))
+    assert len(response.topologies) == len(TOPOLOGIES)
+
+    response = context_client.ListDevices(Empty())
+    assert len(response.devices) == len(DEVICES)
+
+    response = context_client.ListLinks(Empty())
+    assert len(response.links) == len(LINKS)
+
+    response = context_client.ListServices(ContextId(**CONTEXT_ID))
+    assert len(response.services) == 0
+
+
+def test_service_creation(context_client : ContextClient, osm_wim : MockOSM): # pylint: disable=redefined-outer-name
+    # ----- Start the EventsCollector ----------------------------------------------------------------------------------
+    # TODO: restablish the tests of the events
+    # events_collector = EventsCollector(context_client, log_events_received=True)
+    # events_collector.start()
+
+    # ----- Create Service ---------------------------------------------------------------------------------------------
+    service_uuid = osm_wim.create_connectivity_service(WIM_SERVICE_TYPE, WIM_SERVICE_CONNECTION_POINTS)
+    osm_wim.get_connectivity_service_status(service_uuid)
+
+    # ----- Validate collected events ----------------------------------------------------------------------------------
+
+    # packet_connection_uuid = '{:s}:{:s}'.format(service_uuid, DEVTYPE_EMU_PR)
+    # optical_connection_uuid = '{:s}:optical:{:s}'.format(service_uuid, DEVTYPE_EMU_OLS)
+    # optical_service_uuid = '{:s}:optical'.format(service_uuid)
+
+    # expected_events = [
+    #    # Create packet service and add first endpoint
+    #    ('ServiceEvent',    EVENT_CREATE, json_service_id(service_uuid, context_id=CONTEXT_ID)),
+    #    ('ServiceEvent',    EVENT_UPDATE, json_service_id(service_uuid, context_id=CONTEXT_ID)),
+    
+    #    # Configure OLS controller, create optical service, create optical connection
+    #    ('DeviceEvent',     EVENT_UPDATE, json_device_id(DEVICE_O1_UUID)),
+    #    ('ServiceEvent',    EVENT_CREATE, json_service_id(optical_service_uuid, context_id=CONTEXT_ID)),
+    #    ('ConnectionEvent', EVENT_CREATE, json_connection_id(optical_connection_uuid)),
+    
+    #    # Configure endpoint packet devices, add second endpoint to service, create connection
+    #    ('DeviceEvent',     EVENT_UPDATE, json_device_id(DEVICE_R1_UUID)),
+    #    ('DeviceEvent',     EVENT_UPDATE, json_device_id(DEVICE_R3_UUID)),
+    #    ('ServiceEvent',    EVENT_UPDATE, json_service_id(service_uuid, context_id=CONTEXT_ID)),
+    #    ('ConnectionEvent', EVENT_CREATE, json_connection_id(packet_connection_uuid)),
+    # ]
+    # check_events(events_collector, expected_events)
+
+    # # ----- Stop the EventsCollector -----------------------------------------------------------------------------------
+    # events_collector.stop()
+
+
+def test_scenario_service_created(context_client : ContextClient):  # pylint: disable=redefined-outer-name
+    # ----- List entities - Ensure service is created ------------------------------------------------------------------
+    response = context_client.ListContexts(Empty())
+    assert len(response.contexts) == len(CONTEXTS)
+
+    response = context_client.ListTopologies(ContextId(**CONTEXT_ID))
+    assert len(response.topologies) == len(TOPOLOGIES)
+
+    response = context_client.ListDevices(Empty())
+    assert len(response.devices) == len(DEVICES)
+
+    response = context_client.ListLinks(Empty())
+    assert len(response.links) == len(LINKS)
+
+    response = context_client.ListServices(ContextId(**CONTEXT_ID))
+    LOGGER.info('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response)))
+    assert len(response.services) == 2 # L3NM + TAPI
+    for service in response.services:
+        service_id = service.service_id
+        response = context_client.ListConnections(service_id)
+        LOGGER.info('  ServiceId[{:s}] => Connections[{:d}] = {:s}'.format(
+            grpc_message_to_json_string(service_id), len(response.connections), grpc_message_to_json_string(response)))
+        assert len(response.connections) == 1 # one connection per service
+
+
+def test_scenario_kpi_values_created(monitoring_client: MonitoringClient):
+    """
+    This test validates that KPI values have been inserted into the monitoring database.
+    We short k KPI descriptors to test.
+    """
+    response = monitoring_client.GetKpiDescriptorList(Empty())
+    kpi_descriptors = random.choices(response.kpi_descriptor_list, k=2)
+    time.sleep(5)
+
+    for kpi_descriptor in kpi_descriptors:
+        response = monitoring_client.GetInstantKpi(kpi_descriptor.kpi_id)
+        assert response.kpi_id.kpi_id.uuid == kpi_descriptor.kpi_id.kpi_id.uuid
+        assert response.timestamp.timestamp > 0
+
+def test_scenario_alarm_subscriptions_created(monitoring_client: MonitoringClient, alarm_subscription: AlarmSubscription):
+
+    response: AlarmList = monitoring_client.GetAlarms(Empty())
+
+    for alarm in response.alarm_descriptor:
+        new_alarm_subscription                          = alarm_subscription
+        new_alarm_subscription.alarm_id.alarm_id.uuid   = alarm.alarm_id.alarm_id.uuid
+        response = monitoring_client.GetAlarmResponseStream(new_alarm_subscription)
+
+        assert isinstance(response, _MultiThreadedRendezvous)
+
+        
+
+
diff --git a/src/tests/scenario2/old_tests/tests/test_functional_delete_service.py b/src/tests/scenario2/old_tests/tests/test_functional_delete_service.py
new file mode 100644
index 0000000000000000000000000000000000000000..58869a2e0d7bd422c75ba165a192043b77c98a7f
--- /dev/null
+++ b/src/tests/scenario2/old_tests/tests/test_functional_delete_service.py
@@ -0,0 +1,122 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# 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.
+
+import logging, pytest
+from common.DeviceTypes import DeviceTypeEnum
+from common.Settings import get_setting
+from common.tests.EventTools import EVENT_REMOVE, EVENT_UPDATE, check_events
+from common.tools.object_factory.Connection import json_connection_id
+from common.tools.object_factory.Device import json_device_id
+from common.tools.object_factory.Service import json_service_id
+from common.tools.grpc.Tools import grpc_message_to_json_string
+from compute.tests.mock_osm.MockOSM import MockOSM
+from context.client.ContextClient import ContextClient
+from context.client.EventsCollector import EventsCollector
+from common.proto.context_pb2 import ContextId, Empty, ServiceTypeEnum
+from tests.Fixtures import context_client
+from .Fixtures import osm_wim
+from .Objects import (
+    CONTEXT_ID, CONTEXTS, DEVICE_O1_UUID, DEVICE_R1_UUID, DEVICE_R3_UUID, DEVICES, LINKS, TOPOLOGIES, WIM_MAPPING,
+    WIM_PASSWORD, WIM_USERNAME)
+
+
+LOGGER = logging.getLogger(__name__)
+LOGGER.setLevel(logging.DEBUG)
+
+DEVTYPE_EMU_PR  = DeviceTypeEnum.EMULATED_PACKET_ROUTER.value
+DEVTYPE_EMU_OLS = DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM.value
+
+
+def test_scenario_is_correct(context_client : ContextClient):  # pylint: disable=redefined-outer-name
+    # ----- List entities - Ensure service is created ------------------------------------------------------------------
+    response = context_client.ListContexts(Empty())
+    assert len(response.contexts) == len(CONTEXTS)
+
+    response = context_client.ListTopologies(ContextId(**CONTEXT_ID))
+    assert len(response.topologies) == len(TOPOLOGIES)
+
+    response = context_client.ListDevices(Empty())
+    assert len(response.devices) == len(DEVICES)
+
+    response = context_client.ListLinks(Empty())
+    assert len(response.links) == len(LINKS)
+
+    response = context_client.ListServices(ContextId(**CONTEXT_ID))
+    LOGGER.info('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response)))
+    assert len(response.services) == 2 # L3NM + TAPI
+    for service in response.services:
+        service_id = service.service_id
+        response = context_client.ListConnections(service_id)
+        LOGGER.info('  ServiceId[{:s}] => Connections[{:d}] = {:s}'.format(
+            grpc_message_to_json_string(service_id), len(response.connections), grpc_message_to_json_string(response)))
+        assert len(response.connections) == 1 # one connection per service
+
+
+def test_service_removal(context_client : ContextClient, osm_wim : MockOSM): # pylint: disable=redefined-outer-name
+    # ----- Start the EventsCollector ----------------------------------------------------------------------------------
+    #events_collector = EventsCollector(context_client, log_events_received=True)
+    #events_collector.start()
+
+    # ----- Delete Service ---------------------------------------------------------------------------------------------
+    response = context_client.ListServices(ContextId(**CONTEXT_ID))
+    LOGGER.info('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response)))
+    assert len(response.services) == 2 # L3NM + TAPI
+    service_uuids = set()
+    for service in response.services:
+        if service.service_type != ServiceTypeEnum.SERVICETYPE_L3NM: continue
+        service_uuid = service.service_id.service_uuid.uuid
+        service_uuids.add(service_uuid)
+        osm_wim.conn_info[service_uuid] = {}
+
+    assert len(service_uuids) == 1  # assume a single L3NM service has been created
+    service_uuid = set(service_uuids).pop()
+
+    osm_wim.delete_connectivity_service(service_uuid)
+
+    # ----- Validate collected events ----------------------------------------------------------------------------------
+    #packet_connection_uuid = '{:s}:{:s}'.format(service_uuid, DEVTYPE_EMU_PR)
+    #optical_connection_uuid = '{:s}:optical:{:s}'.format(service_uuid, DEVTYPE_EMU_OLS)
+    #optical_service_uuid = '{:s}:optical'.format(service_uuid)
+
+    #expected_events = [
+    #    ('ConnectionEvent', EVENT_REMOVE, json_connection_id(packet_connection_uuid)),
+    #    ('DeviceEvent',     EVENT_UPDATE, json_device_id(DEVICE_R1_UUID)),
+    #    ('DeviceEvent',     EVENT_UPDATE, json_device_id(DEVICE_R3_UUID)),
+    #    ('ServiceEvent',    EVENT_REMOVE, json_service_id(service_uuid, context_id=CONTEXT_ID)),
+    #    ('ConnectionEvent', EVENT_REMOVE, json_connection_id(optical_connection_uuid)),
+    #    ('DeviceEvent',     EVENT_UPDATE, json_device_id(DEVICE_O1_UUID)),
+    #    ('ServiceEvent',    EVENT_REMOVE, json_service_id(optical_service_uuid, context_id=CONTEXT_ID)),
+    #]
+    #check_events(events_collector, expected_events)
+
+    # ----- Stop the EventsCollector -----------------------------------------------------------------------------------
+    #events_collector.stop()
+
+
+def test_services_removed(context_client : ContextClient):  # pylint: disable=redefined-outer-name
+    # ----- List entities - Ensure service is removed ------------------------------------------------------------------
+    response = context_client.ListContexts(Empty())
+    assert len(response.contexts) == len(CONTEXTS)
+
+    response = context_client.ListTopologies(ContextId(**CONTEXT_ID))
+    assert len(response.topologies) == len(TOPOLOGIES)
+
+    response = context_client.ListDevices(Empty())
+    assert len(response.devices) == len(DEVICES)
+
+    response = context_client.ListLinks(Empty())
+    assert len(response.links) == len(LINKS)
+
+    response = context_client.ListServices(ContextId(**CONTEXT_ID))
+    assert len(response.services) == 0
diff --git a/src/tests/scenario3/optical/dashboard.json b/src/tests/scenario3/optical/dashboard.json
index 990ab47e95f9db5bc021ca91333f4c5fe61f7ff7..0ec738eacd422138c4a93d5a75b1864279173132 100644
--- a/src/tests/scenario3/optical/dashboard.json
+++ b/src/tests/scenario3/optical/dashboard.json
@@ -66,6 +66,7 @@
   "liveNow": false,
   "panels": [
     {
+      "collapsed": false,
       "gridPos": {
         "h": 1,
         "w": 24,
@@ -73,6 +74,7 @@
         "y": 0
       },
       "id": 12,
+      "panels": [],
       "title": "General status",
       "type": "row"
     },
@@ -216,7 +218,7 @@
       "options": {
         "legend": {
           "calcs": [],
-          "displayMode": "list",
+          "displayMode": "hidden",
           "placement": "bottom"
         },
         "tooltip": {
@@ -230,7 +232,11 @@
             "type": "prometheus",
             "uid": "${DS_PROMETHEUS}"
           },
-          "expr": "tfs_opticalattackmanager_dropped_assessments_created",
+          "editorMode": "code",
+          "exemplar": false,
+          "expr": "rate(tfs_opticalattackmanager_dropped_assessments_created[1m])",
+          "instant": false,
+          "range": true,
           "refId": "A"
         }
       ],
@@ -238,6 +244,7 @@
       "type": "timeseries"
     },
     {
+      "collapsed": false,
       "gridPos": {
         "h": 1,
         "w": 24,
@@ -245,6 +252,7 @@
         "y": 9
       },
       "id": 10,
+      "panels": [],
       "title": "Pipeline",
       "type": "row"
     },
@@ -253,6 +261,7 @@
         "type": "prometheus",
         "uid": "${DS_PROMETHEUS}"
       },
+      "description": "",
       "fieldConfig": {
         "defaults": {
           "color": {
@@ -309,11 +318,11 @@
         "x": 0,
         "y": 10
       },
-      "id": 16,
+      "id": 14,
       "options": {
         "legend": {
           "calcs": [],
-          "displayMode": "list",
+          "displayMode": "hidden",
           "placement": "bottom"
         },
         "tooltip": {
@@ -328,25 +337,13 @@
             "uid": "${DS_PROMETHEUS}"
           },
           "editorMode": "code",
-          "expr": "histogram_quantile(0.95, sum(rate(tfs_opticalattackmanager_loop_seconds_bucket[$__rate_interval])) by (le))",
-          "legendFormat": "Measured",
+          "expr": "tfs_opticalattackmanager_active_services",
+          "legendFormat": "Active services",
           "range": true,
           "refId": "A"
-        },
-        {
-          "datasource": {
-            "type": "prometheus",
-            "uid": "${DS_PROMETHEUS}"
-          },
-          "editorMode": "code",
-          "expr": "tfs_opticalattackmanager_desired_monitoring_interval",
-          "hide": false,
-          "legendFormat": "Desired",
-          "range": true,
-          "refId": "B"
         }
       ],
-      "title": "Loop time",
+      "title": "Number of active optical services",
       "type": "timeseries"
     },
     {
@@ -354,7 +351,6 @@
         "type": "prometheus",
         "uid": "${DS_PROMETHEUS}"
       },
-      "description": "",
       "fieldConfig": {
         "defaults": {
           "color": {
@@ -411,7 +407,7 @@
         "x": 12,
         "y": 10
       },
-      "id": 14,
+      "id": 16,
       "options": {
         "legend": {
           "calcs": [],
@@ -430,13 +426,25 @@
             "uid": "${DS_PROMETHEUS}"
           },
           "editorMode": "code",
-          "expr": "tfs_opticalattackmanager_active_services",
-          "legendFormat": "Active services",
+          "expr": "histogram_quantile(0.95, sum(rate(tfs_opticalattackmanager_loop_seconds_bucket[$__rate_interval])) by (le))",
+          "legendFormat": "Measured",
           "range": true,
           "refId": "A"
+        },
+        {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "editorMode": "code",
+          "expr": "tfs_opticalattackmanager_desired_monitoring_interval",
+          "hide": false,
+          "legendFormat": "Desired",
+          "range": true,
+          "refId": "B"
         }
       ],
-      "title": "Number of active optical services",
+      "title": "Loop time",
       "type": "timeseries"
     },
     {
@@ -543,7 +551,7 @@
             "uid": "${DS_PROMETHEUS}"
           },
           "editorMode": "code",
-          "expr": "histogram_quantile(0.95, sum(rate(tfs_opticalattackdetector_inference_response_time_bucket[$__rate_interval])) by (le))",
+          "expr": "histogram_quantile(0.95, sum(rate(tfs_opticalattackdetector_execution_details_histogram_duration_bucket{step=\"uldetection\"}[$__rate_interval])) by (le))",
           "hide": false,
           "legendFormat": "UL Inference",
           "range": true,
@@ -555,7 +563,7 @@
             "uid": "${DS_PROMETHEUS}"
           },
           "editorMode": "code",
-          "expr": "histogram_quantile(0.95, sum(rate(tfs_opticalattackdetector_cache_response_time_bucket[$__rate_interval])) by (le))",
+          "expr": "histogram_quantile(0.95, sum(rate(tfs_opticalattackdetector_execution_details_histogram_duration_bucket{step=\"cachefetch\"}[$__rate_interval])) by (le))",
           "hide": false,
           "interval": "",
           "legendFormat": "Cache",
@@ -568,7 +576,7 @@
             "uid": "${DS_PROMETHEUS}"
           },
           "editorMode": "code",
-          "expr": "histogram_quantile(0.95, sum(rate(tfs_opticalattackdetector_mitigation_response_time_bucket[$__rate_interval])) by (le))",
+          "expr": "histogram_quantile(0.95, sum(rate(tfs_opticalattackdetector_execution_details_histogram_duration_bucket{step=\"mitigation\"}[$__rate_interval])) by (le))",
           "hide": false,
           "interval": "",
           "legendFormat": "Mitigator",
@@ -1353,7 +1361,7 @@
       "type": "timeseries"
     },
     {
-      "collapsed": false,
+      "collapsed": true,
       "gridPos": {
         "h": 1,
         "w": 24,
@@ -1361,163 +1369,164 @@
         "y": 44
       },
       "id": 2,
-      "panels": [],
-      "title": "General status",
-      "type": "row"
-    },
-    {
-      "datasource": {
-        "type": "prometheus",
-        "uid": "${DS_PROMETHEUS}"
-      },
-      "fieldConfig": {
-        "defaults": {
-          "color": {
-            "mode": "palette-classic"
-          },
-          "custom": {
-            "axisLabel": "",
-            "axisPlacement": "auto",
-            "barAlignment": 0,
-            "drawStyle": "line",
-            "fillOpacity": 29,
-            "gradientMode": "none",
-            "hideFrom": {
-              "legend": false,
-              "tooltip": false,
-              "viz": false
-            },
-            "lineInterpolation": "linear",
-            "lineWidth": 1,
-            "pointSize": 5,
-            "scaleDistribution": {
-              "type": "linear"
-            },
-            "showPoints": "auto",
-            "spanNulls": false,
-            "stacking": {
-              "group": "A",
-              "mode": "normal"
-            },
-            "thresholdsStyle": {
-              "mode": "off"
-            }
-          },
-          "mappings": [],
-          "thresholds": {
-            "mode": "absolute",
-            "steps": [
-              {
-                "color": "green",
-                "value": null
-              },
-              {
-                "color": "red",
-                "value": 80
-              }
-            ]
-          },
-          "unit": "mwatt"
-        },
-        "overrides": []
-      },
-      "gridPos": {
-        "h": 8,
-        "w": 12,
-        "x": 0,
-        "y": 45
-      },
-      "id": 33,
-      "options": {
-        "legend": {
-          "calcs": [],
-          "displayMode": "list",
-          "placement": "right"
-        },
-        "tooltip": {
-          "mode": "single",
-          "sort": "none"
-        }
-      },
-      "targets": [
-        {
-          "datasource": {
-            "type": "prometheus",
-            "uid": "${DS_PROMETHEUS}"
-          },
-          "editorMode": "code",
-          "exemplar": false,
-          "expr": "sum(scaph_process_power_consumption_microwatts{namespace=\"tfs\", cmdline=~\".+opticalattackmanager.+\"})/1000",
-          "instant": false,
-          "legendFormat": "Manager",
-          "range": true,
-          "refId": "A"
-        },
+      "panels": [
         {
           "datasource": {
             "type": "prometheus",
             "uid": "${DS_PROMETHEUS}"
           },
-          "editorMode": "code",
-          "exemplar": false,
-          "expr": "sum(scaph_process_power_consumption_microwatts{namespace=\"tfs\", cmdline=~\".+opticalattackdetector.+\"})/1000",
-          "hide": false,
-          "instant": false,
-          "legendFormat": "Detector",
-          "range": true,
-          "refId": "B"
-        },
-        {
-          "datasource": {
-            "type": "prometheus",
-            "uid": "${DS_PROMETHEUS}"
+          "fieldConfig": {
+            "defaults": {
+              "color": {
+                "mode": "palette-classic"
+              },
+              "custom": {
+                "axisLabel": "",
+                "axisPlacement": "auto",
+                "barAlignment": 0,
+                "drawStyle": "line",
+                "fillOpacity": 29,
+                "gradientMode": "none",
+                "hideFrom": {
+                  "legend": false,
+                  "tooltip": false,
+                  "viz": false
+                },
+                "lineInterpolation": "linear",
+                "lineWidth": 1,
+                "pointSize": 5,
+                "scaleDistribution": {
+                  "type": "linear"
+                },
+                "showPoints": "auto",
+                "spanNulls": false,
+                "stacking": {
+                  "group": "A",
+                  "mode": "normal"
+                },
+                "thresholdsStyle": {
+                  "mode": "off"
+                }
+              },
+              "mappings": [],
+              "thresholds": {
+                "mode": "absolute",
+                "steps": [
+                  {
+                    "color": "green",
+                    "value": null
+                  },
+                  {
+                    "color": "red",
+                    "value": 80
+                  }
+                ]
+              },
+              "unit": "mwatt"
+            },
+            "overrides": []
           },
-          "editorMode": "code",
-          "exemplar": false,
-          "expr": "sum(scaph_process_power_consumption_microwatts{namespace=\"tfs\", cmdline=~\".+dbscan.+\"})/1000",
-          "hide": false,
-          "instant": false,
-          "interval": "",
-          "legendFormat": "UL Inference",
-          "range": true,
-          "refId": "C"
-        },
-        {
-          "datasource": {
-            "type": "prometheus",
-            "uid": "${DS_PROMETHEUS}"
+          "gridPos": {
+            "h": 8,
+            "w": 12,
+            "x": 0,
+            "y": 45
           },
-          "editorMode": "code",
-          "exemplar": false,
-          "expr": "sum(scaph_process_power_consumption_microwatts{namespace=\"tfs\", cmdline=~\"redis-server.+\"})/1000",
-          "hide": false,
-          "instant": false,
-          "interval": "",
-          "legendFormat": "Cache",
-          "range": true,
-          "refId": "D"
-        },
-        {
-          "datasource": {
-            "type": "prometheus",
-            "uid": "${DS_PROMETHEUS}"
+          "id": 33,
+          "options": {
+            "legend": {
+              "calcs": [],
+              "displayMode": "list",
+              "placement": "right"
+            },
+            "tooltip": {
+              "mode": "single",
+              "sort": "none"
+            }
           },
-          "editorMode": "code",
-          "exemplar": false,
-          "expr": "sum(scaph_process_power_consumption_microwatts{namespace=\"tfs\", cmdline=~\".+opticalattackmitigator.+\"})/1000",
-          "hide": false,
-          "instant": false,
-          "interval": "",
-          "legendFormat": "Mitigator",
-          "range": true,
-          "refId": "E"
+          "targets": [
+            {
+              "datasource": {
+                "type": "prometheus",
+                "uid": "${DS_PROMETHEUS}"
+              },
+              "editorMode": "code",
+              "exemplar": false,
+              "expr": "sum(scaph_process_power_consumption_microwatts{namespace=\"tfs\", cmdline=~\".+opticalattackmanager.+\"})/1000",
+              "instant": false,
+              "legendFormat": "Manager",
+              "range": true,
+              "refId": "A"
+            },
+            {
+              "datasource": {
+                "type": "prometheus",
+                "uid": "${DS_PROMETHEUS}"
+              },
+              "editorMode": "code",
+              "exemplar": false,
+              "expr": "sum(scaph_process_power_consumption_microwatts{namespace=\"tfs\", cmdline=~\".+opticalattackdetector.+\"})/1000",
+              "hide": false,
+              "instant": false,
+              "legendFormat": "Detector",
+              "range": true,
+              "refId": "B"
+            },
+            {
+              "datasource": {
+                "type": "prometheus",
+                "uid": "${DS_PROMETHEUS}"
+              },
+              "editorMode": "code",
+              "exemplar": false,
+              "expr": "sum(scaph_process_power_consumption_microwatts{namespace=\"tfs\", cmdline=~\".+dbscan.+\"})/1000",
+              "hide": false,
+              "instant": false,
+              "interval": "",
+              "legendFormat": "UL Inference",
+              "range": true,
+              "refId": "C"
+            },
+            {
+              "datasource": {
+                "type": "prometheus",
+                "uid": "${DS_PROMETHEUS}"
+              },
+              "editorMode": "code",
+              "exemplar": false,
+              "expr": "sum(scaph_process_power_consumption_microwatts{namespace=\"tfs\", cmdline=~\"redis-server.+\"})/1000",
+              "hide": false,
+              "instant": false,
+              "interval": "",
+              "legendFormat": "Cache",
+              "range": true,
+              "refId": "D"
+            },
+            {
+              "datasource": {
+                "type": "prometheus",
+                "uid": "${DS_PROMETHEUS}"
+              },
+              "editorMode": "code",
+              "exemplar": false,
+              "expr": "sum(scaph_process_power_consumption_microwatts{namespace=\"tfs\", cmdline=~\".+opticalattackmitigator.+\"})/1000",
+              "hide": false,
+              "instant": false,
+              "interval": "",
+              "legendFormat": "Mitigator",
+              "range": true,
+              "refId": "E"
+            }
+          ],
+          "title": "Energy consumption",
+          "type": "timeseries"
         }
       ],
-      "title": "Energy consumption",
-      "type": "timeseries"
+      "title": "General status",
+      "type": "row"
     }
   ],
-  "refresh": "5s",
+  "refresh": "",
   "schemaVersion": 36,
   "style": "dark",
   "tags": [],
@@ -1525,13 +1534,13 @@
     "list": []
   },
   "time": {
-    "from": "now-5m",
+    "from": "now-30m",
     "to": "now"
   },
   "timepicker": {},
   "timezone": "",
   "title": "TFS / Optical cybersecurity",
   "uid": "-Q-B-AsVk",
-  "version": 1,
+  "version": 5,
   "weekStart": ""
 }
\ No newline at end of file
diff --git a/src/tests/scenario3/optical/deploy_specs.sh b/src/tests/scenario3/optical/deploy_specs.sh
index 878013d8b82177e3d70aa432e01583f03eded237..73c9112254c3e95eea4155abd7afd26ee358e368 100644
--- a/src/tests/scenario3/optical/deploy_specs.sh
+++ b/src/tests/scenario3/optical/deploy_specs.sh
@@ -21,6 +21,8 @@ export TFS_COMPONENTS="context device automation monitoring pathcomp service sli
 
 # addition for the optical cybersecurity component
 export TFS_COMPONENTS="${TFS_COMPONENTS} dbscanserving opticalattackmitigator opticalattackdetector opticalattackmanager"
+
+export TFS_EXTRA_MANIFESTS="manifests/nginx_ingress_http.yaml manifests/servicemonitors.yaml"
 export TFS_EXTRA_MANIFESTS="${TFS_EXTRA_MANIFESTS} manifests/cachingservice.yaml"
 
 
diff --git a/src/tests/scenario3/optical/jocn/README.md b/src/tests/scenario3/optical/jocn/README.md
index 0981331111d00ff7e6a6245c20186d4dc60f55f8..dfc3d373b626e8f68a52ecd86ea6834568c82f00 100644
--- a/src/tests/scenario3/optical/jocn/README.md
+++ b/src/tests/scenario3/optical/jocn/README.md
@@ -2,4 +2,6 @@
 
 __Authors__: [Carlos Natalino](https://www.chalmers.se/en/persons/carda/), Lluis Gifre Renom, Francisco-Javier Moreno-Muro, Sergio Gonzalez Diaz, Ricard Vilalta, Raul Muñoz, Paolo Monti, and Marija Furdek
 
-Experiments from the JOCN paper.
\ No newline at end of file
+The paper has been published as open access: https://doi.org/10.1364/JOCN.482932
+
+This folder contains the experiments published in the JOCN paper.
diff --git a/src/tests/scenario3/optical/jocn/run_experiment.py b/src/tests/scenario3/optical/jocn/run_experiment.py
index 4ebf5ea80baecc89a66fef5bcb0f240bd61f1f5a..d9cfb9e4b4d7daa55f2b399c90c52a35715d279c 100644
--- a/src/tests/scenario3/optical/jocn/run_experiment.py
+++ b/src/tests/scenario3/optical/jocn/run_experiment.py
@@ -29,15 +29,24 @@ from kubernetes import client, config
 from common.Constants import ServiceNameEnum
 from common.Settings import get_service_host, get_setting, wait_for_environment_variables
 
-from configs import base_results_folder, datetime_format, hpa_data
-
 LOGGER = None
 SERVICE_LIST_KEY = get_setting(
     "OPTICALATTACKMANAGER_SERVICE_LIST_KEY", default="opt-sec:active-services"
 )
 
 # Configs can be set in Configuration class directly or using helper utility
+namespace = get_setting("TFS_K8S_NAMESPACE", default="tfs")
 config.load_kube_config()
+v1 = client.CoreV1Api()
+
+ret = v1.list_namespaced_endpoints(namespace=namespace, watch=False)
+for item in ret.items:
+    if "caching" in item.metadata.name:
+        for subset in item.subsets:
+            for port in subset.ports:
+                if "redis" in port.name:  # endpoint is ready for being scraped
+                    CACHING_HOST = subset.addresses[0].ip
+                    CACHING_PORT = port.port
 
 logging.getLogger("kubernetes").setLevel(logging.INFO) # avoid lengthy messages
 
@@ -53,17 +62,11 @@ def signal_handler(signal, frame):  # pylint: disable=redefined-outer-name
 def manage_number_services(terminate, folder):
 
     # connecting with Redis
-    redis_host = get_service_host(ServiceNameEnum.CACHING)
-    redis_password = None
-    if redis_host is not None:
-        redis_port = int(get_setting("CACHINGSERVICE_SERVICE_PORT_REDIS"))
-        redis_password = get_setting("REDIS_PASSWORD")
-    else:
-        LOGGER.fatal("No environment variables set for Redis")
+    redis_password = get_setting("REDIS_PASSWORD")
     
     cache = None
     try:
-        cache = redis.Redis(host=redis_host, port=redis_port, password=redis_password)
+        cache = redis.Redis(host=CACHING_HOST, port=CACHING_PORT, password=redis_password)
     except Exception as e:
         LOGGER.exception(e)
     
@@ -73,43 +76,11 @@ def manage_number_services(terminate, folder):
     # make sure we have the correct loop time
     cache.set("MONITORING_INTERVAL", 30)
 
-    # connecting to the HPA API
-    autoscaling = client.AutoscalingV1Api()
-
-    # connecting to the custom objects API
-    api = client.CustomObjectsApi()
-
-    # open the file that will store the information
-    services_file = open(os.path.join(folder, "services.csv"), "wt", encoding="utf-8")
-    services_file.write("# file with number of services\n")
-    services_file.write("timestamp,number_services")
-
-    hpa_file = open(os.path.join(folder, "hpas.csv"), "wt", encoding="utf-8")
-
-    # writing headers for the HPA columns
-    hpas = autoscaling.list_namespaced_horizontal_pod_autoscaler(namespace="tfs")
-    
-    for hpa in hpas.items:
-        hpa_file.write(hpa.metadata.name + "\n")
-        for d in hpa_data:
-            services_file.write(f",{hpa.metadata.name}_{d}")
-    
-    # monitoring CPU and RAM usage of the single Pods
-    for s in ["cache", "manager"]:
-        for k in ["cpu", "ram"]:
-            services_file.write(f",{s}_{k}")
-
-    services_file.write("\n")
-    services_file.flush()
-
-    hpa_file.flush()
-    hpa_file.close()
-
     # define number of services
     # 6 values followed by two zeros
     number_services = [0, 10]
 
-    loads = [120, 240, 480, 960, 1440, 1920, 1922]
+    loads = [120, 240, 480, 960, 1440, 1920, 1921]
     for load in loads:
         number_services.append(int(load/2))
         for _ in range(5):
@@ -125,41 +96,6 @@ def manage_number_services(terminate, folder):
         if cur_tick % ticks == 0:
             LOGGER.debug("go load!")
 
-            # getting data from autoscaler
-            hpas = autoscaling.list_namespaced_horizontal_pod_autoscaler(namespace="tfs")
-            # - "cur_utilization"
-            # - "target_utilization"
-            # - "cur_replicas"
-            # - "desired_replicas"
-            hpa_string = ""
-            for hpa in hpas.items:
-                hpa_string += f",{hpa.status.current_cpu_utilization_percentage}"
-                hpa_string += f",{hpa.spec.target_cpu_utilization_percentage}"
-                hpa_string += f",{hpa.status.current_replicas}"
-                hpa_string += f",{hpa.status.desired_replicas}"
-            
-            # monitoring resource usage
-            k8s_pods = api.list_cluster_custom_object(
-                "metrics.k8s.io", "v1beta1", "namespaces/tfs/pods"
-            )
-            # - "cache_cpu"
-            # - "cache_ram"
-            # - "manager_cpu"
-            # - "manager_ram"
-            resource_string = ""
-
-            # we use two loops to ensure the same order
-            for stats in k8s_pods["items"]:
-                if "caching" in stats['metadata']['name']:
-                    resource_string += f",{stats['containers'][0]['usage']['cpu']}"
-                    resource_string += f",{stats['containers'][0]['usage']['memory']}"
-                    break
-            for stats in k8s_pods["items"]:
-                if "opticalattackmanager" in stats['metadata']['name']:
-                    resource_string += f",{stats['containers'][0]['usage']['cpu']}"
-                    resource_string += f",{stats['containers'][0]['usage']['memory']}"
-                    break
-
             # calculate the difference between current and expected
             cur_services = cache.llen(SERVICE_LIST_KEY)
             diff_services = cur_services - number_services[cur_tick % len(number_services)]
@@ -169,12 +105,6 @@ def manage_number_services(terminate, folder):
                 LOGGER.info("Setting monitoring interval to 60")
                 set_to_60 = True
 
-            # write current number with one second difference
-            cur_datetime = datetime.datetime.now()
-            reported_datetime = cur_datetime - datetime.timedelta(seconds=1)
-            reported_datetime_str = reported_datetime.strftime(datetime_format)
-            services_file.write(f"{reported_datetime_str},{cur_services}{hpa_string}\n")
-
             if diff_services < 0:  # current is lower than expected
                 LOGGER.debug(f"inserting <{-diff_services}> services")
                 for _ in range(-diff_services):
@@ -193,97 +123,20 @@ def manage_number_services(terminate, folder):
                 LOGGER.debug(f"deleting <{diff_services}> services")
                 cache.lpop(SERVICE_LIST_KEY, diff_services)
 
-            # writing the new number with the current time
-            services_file.write(
-                f"{datetime.datetime.now().strftime(datetime_format)},"
-                f"{number_services[cur_tick % len(number_services)]}"
-                f"{hpa_string}{resource_string}\n"
-            )
-
             assert number_services[cur_tick % len(number_services)] == cache.llen(SERVICE_LIST_KEY)
 
-            services_file.flush()
         else:
             LOGGER.debug("tick load!")
         cur_tick += 1
         if cur_tick > len(number_services) + 1:
             break
-    services_file.flush()
-    services_file.close()
+
     # make sure we have the correct loop time
     cache.set("MONITORING_INTERVAL", 30)
 
     LOGGER.info("Finished load!")
 
 
-def monitor_endpoints(terminate):
-    LOGGER.info("starting experiment!")
-    v1 = client.CoreV1Api()
-    while not terminate.wait(timeout=30):
-
-        # load base yaml
-        with open("/home/carda/projects/prometheus/prometheus.yml.backup", "rt") as file:
-            current_version = yaml.load(file, Loader=yaml.FullLoader)
-
-        # checking endpoints
-        ret = v1.list_namespaced_endpoints(namespace="tfs", watch=False)
-        for item in ret.items:
-            found = False
-
-            for subset in item.subsets:
-                for p, q in enumerate(subset.ports):
-                    if q.name == "metrics":  # endpoint is ready for being scraped
-                        found = True
-            if not found:
-                continue  # if no `metrics` port, jump!
-
-            found = False  # now look for existing configuration
-            for i in range(len(current_version["scrape_configs"])):
-                if current_version["scrape_configs"][i]["job_name"] == item.metadata.name:
-                    found = True
-                    break # found it! `i` will contain the correct index
-
-            if not found:  # write it from zero!
-                current_version["scrape_configs"].append({})
-                current_version["scrape_configs"][-1]["job_name"] = item.metadata.name
-
-                # set the correct `i` value
-                i = len(current_version["scrape_configs"]) - 1
-
-            if "static_configs" not in current_version["scrape_configs"][i]:
-                current_version["scrape_configs"][i]["static_configs"] = [{"targets": []}]
-            # reset IPs
-            current_version["scrape_configs"][i]["static_configs"][0]["targets"] = []
-            for subset in item.subsets:
-                for p, q in enumerate(subset.ports):
-                    if q.name == "metrics":
-                        for c, a in enumerate(subset.addresses):
-                            print(f"{item.metadata.name}\t{a.ip}:{q.port}")
-                            current_version["scrape_configs"][i]["static_configs"][0]["targets"].append(f"{a.ip}:9192")
-
-        # write yaml
-        with open("/home/carda/projects/prometheus/prometheus.yml", "wt") as file:
-            yaml.dump(current_version, file)
-        
-        # reloading configuration
-        # docs: https://www.robustperception.io/reloading-prometheus-configuration/
-        requests.post("http://127.0.0.1:9090/-/reload")
-
-    # resetting prometheus to the original state
-    # load base yaml
-    with open("/home/carda/projects/prometheus/prometheus.yml.backup", "rt") as file:
-        current_version = yaml.load(file, Loader=yaml.FullLoader)
-    
-    # write yaml
-    with open("/home/carda/projects/prometheus/prometheus.yml", "wt") as file:
-        yaml.dump(current_version, file)        
-    # reloading configuration
-    # docs: https://www.robustperception.io/reloading-prometheus-configuration/
-    requests.post("http://127.0.0.1:9090/-/reload")
-
-    LOGGER.info("Finished experiment!")
-
-
 if __name__ == "__main__":
     # logging.basicConfig(level="DEBUG")
     logging.basicConfig(
@@ -294,41 +147,18 @@ if __name__ == "__main__":
     LOGGER = logging.getLogger(__name__)
 
     wait_for_environment_variables(
-        ["CACHINGSERVICE_SERVICE_PORT_REDIS", "REDIS_PASSWORD"]
+        ["REDIS_PASSWORD"]
     )
 
     signal.signal(signal.SIGINT, signal_handler)
     signal.signal(signal.SIGTERM, signal_handler)
 
-    # generate results folder
-    output_folder = os.path.join(base_results_folder, "jocn_" + datetime.datetime.now(
-        datetime.timezone.utc
-    ).strftime("%Y%m%dT%H%M%S.%fUTC"))
-    os.makedirs(output_folder)
-
     # start load handler
-    proc_load = multiprocessing.Process(
-        target=manage_number_services,
-        args=(
-            terminate,
-            output_folder,
-        ),
-    )
-    proc_load.start()
-
-    # start experiment monitoring
-    proc_experiment = multiprocessing.Process(
-        target=monitor_endpoints, args=(terminate,)
-    )
-    proc_experiment.start()
+    manage_number_services(terminate=terminate)
 
     # Wait for Ctrl+C or termination signal
     while not terminate.wait(timeout=0.1):
         pass
 
-    # waits for the processes to finish
-    proc_load.join()
-    proc_experiment.join()
-
     # exits
     LOGGER.info("Bye!")
diff --git a/src/tests/scenario3/optical/ofc23/README.md b/src/tests/scenario3/optical/ofc23/README.md
index f517ab728906fa7640143a7b27d76418c5ee7960..32d5eb25216dfe17b5b80ca0430da4eee69f26f5 100644
--- a/src/tests/scenario3/optical/ofc23/README.md
+++ b/src/tests/scenario3/optical/ofc23/README.md
@@ -4,14 +4,22 @@ __Authors__: [Carlos Natalino](https://www.chalmers.se/en/persons/carda/), Lluis
 
 ## Executing
 
+All the commands here assume you are in the TFS home folder.
+
+First, we need to load the TFS deploy specifications:
+
 ```bash
 source src/tests/scenario3/optical/deploy_specs.sh
 ```
 
+Then, we load the environment variables that identify the TFS deployment:
+
 ```bash
 source tfs_runtime_env_vars.sh
 ```
 
+Then, we are able to execute the load generator:
+
 ```bash
 python src/tests/scenario3/optical/ofc23/run_experiment_demo.py
 ```
\ No newline at end of file
diff --git a/src/tests/scenario3/optical/ofc23/dashboard.json b/src/tests/scenario3/optical/ofc23/dashboard.json
index d62fe95a0407287168cd03195f3d48457d7ec288..98328dfd4d0a03dd8be710532c483e9e92aa13d4 100644
--- a/src/tests/scenario3/optical/ofc23/dashboard.json
+++ b/src/tests/scenario3/optical/ofc23/dashboard.json
@@ -725,7 +725,7 @@
   },
   "timepicker": {},
   "timezone": "",
-  "title": "Scalable and Efficient Pipeline for ML-based Optical Network Monitoring",
+  "title": "Scalable and Efficient Pipeline for ML-based Optical Network Monitoring - No longer maintained!",
   "uid": "IYQSZX0Vk",
   "version": 4,
   "weekStart": ""
diff --git a/src/tests/scenario3/optical/ofc23/run_experiment_demo.py b/src/tests/scenario3/optical/ofc23/run_experiment_demo.py
index 27151695b82426cc76c97971bbbb1749d4ebbbf5..16ddb9c315784c39258aaf0f342ebd8da35b17e8 100644
--- a/src/tests/scenario3/optical/ofc23/run_experiment_demo.py
+++ b/src/tests/scenario3/optical/ofc23/run_experiment_demo.py
@@ -29,16 +29,19 @@ namespace = get_setting("TFS_K8S_NAMESPACE", default="tfs")
 config.load_kube_config()
 v1 = client.CoreV1Api()
 
-caching_pod = None
-pods = v1.list_namespaced_pod(namespace=namespace)
-for pod in pods.items:
-    # print(pod.metadata)
-    if "app" in pod.metadata.labels and "caching" in pod.metadata.labels["app"]:
-        caching_pod = pod
+ret = v1.list_namespaced_endpoints(namespace=namespace, watch=False)
+for item in ret.items:
+    if "caching" in item.metadata.name:
+        for subset in item.subsets:
+            for port in subset.ports:
+                print(item.metadata.name, port)
+                if "redis" in port.name:  # endpoint is ready for being scraped
+                    CACHING_HOST = subset.addresses[0].ip
+                    CACHING_PORT = port.port
 
 LOGGER = None
 SERVICE_LIST_KEY = get_setting(
-    "OPTICALATTACKMANAGER_SERVICE_LIST_KEY", default="opt-sec:active-services"
+    "OPTICALATTACKMANAGER_SERVICE_LIST_KEY", default="opt-sec-active-services"
 )
 
 # setting up graceful shutdown
@@ -53,19 +56,12 @@ def signal_handler(signal, frame):  # pylint: disable=redefined-outer-name
 def manage_number_services(terminate):
 
     # connecting with Redis
-    redis_host = caching_pod.status.pod_ip
-    redis_password = None
-    if redis_host is not None:
-        redis_port = int(get_setting("CACHINGSERVICE_SERVICE_PORT_REDIS", default=6379))
-        redis_password = get_setting("REDIS_PASSWORD")
-        LOGGER.info(f"Redis password: {redis_password}")
-    else:
-        LOGGER.fatal("No environment variables set for Redis")
+    redis_password = get_setting("REDIS_PASSWORD")
     
     cache = None
     try:
-        LOGGER.info(f"Connecting to Redis: host={redis_host}, port={redis_port}, password={redis_password}")
-        cache = redis.Redis(host=redis_host, port=redis_port, password=redis_password)
+        LOGGER.info(f"Connecting to Redis: host={CACHING_HOST}, port={CACHING_PORT}, password={redis_password}")
+        cache = redis.Redis(host=CACHING_HOST, port=CACHING_PORT, password=redis_password)
         cache.ping()
         LOGGER.info("Connected to Redis")
     except Exception as e:
@@ -78,10 +74,11 @@ def manage_number_services(terminate):
     cache.set("MONITORING_INTERVAL", 30)
 
     # define number of services
+    next_kpi_id = 0
 
     print("Starting load!")
     while not terminate.wait(timeout=1):  # timeout=300
-        print("\no <number> -> sets the number services currently monitored")
+        print("\n\no <number> -> sets the number services currently monitored")
         print("p <seconds> -> sets the loop period")
         print("m <1=SL / 2=UL> -> sets the ML model used")
         print("q -> exit")
@@ -101,16 +98,20 @@ def manage_number_services(terminate):
                 if diff_services < 0:  # current is lower than expected
                     LOGGER.debug(f"\tinserting <{-diff_services}> services")
                     for _ in range(-diff_services):
+                        next_kpi_id += 1
                         cache.lpush(
                             SERVICE_LIST_KEY,
                             pickle.dumps(
                                 {
                                     "context": str(uuid.uuid4()),
                                     "service": str(uuid.uuid4()),
-                                    "kpi": str(uuid.uuid4()),
+                                    # "kpi": str(uuid.uuid4()),
+                                    "kpi": str(next_kpi_id),
                                 }
                             ),
                         )
+                    LOGGER.debug(f"Services at the Redis DB: {cache.llen(SERVICE_LIST_KEY)}")
+                    
                 elif diff_services > 0:  # current is greater than expected
                     # delete services
                     LOGGER.debug(f"\tdeleting <{diff_services}> services")
diff --git a/src/tests/scenario3/optical/scaphandre.yaml b/src/tests/scenario3/optical/scaphandre.yaml
deleted file mode 100644
index 3b348cb8a91ee257eaa9aa73e96108d20931e2a2..0000000000000000000000000000000000000000
--- a/src/tests/scenario3/optical/scaphandre.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
-#
-# 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.
-
-# this file deploys a tool that enables the monitoring of energy consumption
-# per component.
-# More info: https://github.com/hubblo-org/scaphandre
-
----
-apiVersion: monitoring.coreos.com/v1
-kind: ServiceMonitor
-metadata:
-  namespace: monitoring # namespace where prometheus is running
-  name: tfs-scaph-metric
-  labels:
-    app.kubernetes.io/name: scaphandre
-    #release: prometheus
-    #release: prom  # name of the release 
-    # ( VERY IMPORTANT: You need to know the correct release name by viewing 
-    #   the servicemonitor of Prometheus itself: Without the correct name, 
-    #   Prometheus cannot identify the metrics of the Flask app as the target.)
-spec:
-  selector:
-    matchLabels:
-      # Target app service
-      #namespace: tfs
-      app.kubernetes.io/name: scaphandre
-      #release: prometheus # same as above
-  endpoints:
-  - port: metrics # named port in target app
-    scheme: http
-    path: /metrics # path to scrape
-    interval: 5s # scrape interval
-  namespaceSelector:
-    any: false
-    matchNames:
-    - tfs # namespace where the app is running
\ No newline at end of file
diff --git a/src/webui/grafana_db_mon_kpis_psql.json b/src/webui/grafana_db_mon_kpis_psql.json
index 750e5254ea1e4e689d92fc39cedd22a5ee619e03..845ed4296605b6a0d15f38c9a20576a93195543e 100644
--- a/src/webui/grafana_db_mon_kpis_psql.json
+++ b/src/webui/grafana_db_mon_kpis_psql.json
@@ -169,7 +169,7 @@
             "hide": false,
             "metricColumn": "kpi_value",
             "rawQuery": true,
-            "rawSql": "SELECT\r\n  $__time(timestamp), kpi_value AS metric, device_name, endpoint_name, kpi_sample_type\r\nFROM\r\n  tfs_monitoring_kpis\r\nWHERE\r\n  $__timeFilter(timestamp) AND device_name IN (${device_name}) AND endpoint_name IN (${endpoint_name}) AND kpi_sample_type IN (${kpi_sample_type})\r\nGROUP BY\r\n  device_name, endpoint_name, kpi_sample_type\r\nORDER BY\r\n  timestamp",
+            "rawSql": "SELECT\r\n  $__time(timestamp), kpi_value AS metric, device_name, endpoint_name, kpi_sample_type\r\nFROM\r\n  tfs_monitoring_kpis\r\nWHERE\r\n  $__timeFilter(timestamp) AND device_name IN (${device_name}) AND endpoint_name IN (${endpoint_name}) AND kpi_sample_type IN (${kpi_sample_type})\r\nORDER BY\r\n  timestamp",
             "refId": "A",
             "select": [
               [